SlideShare a Scribd company logo
1 of 28
Download to read offline
Material Designな
Drawerを実装したい
2015/3/12
@sakebook
http://github.com/sakebook
http://sakebook.hatenablog.com
自己紹介
酒本伸也
@sakebook
Android Developer & Lifelogger

JX通信社 Vingow(Android) / NewsDigest(iOS)
Swift
Google Play
真似したい
Project
Template
いろいろ違う
よく見たらいろいろある
それぞれの実装方法を紹介
• ハンバーガーが

くるっとする
• ToolBarに被らない
Google Photo
<style name="BaseTheme"
parent="Theme.AppCompat.Light.NoActionBar">
<item name="drawerArrowStyle">@style/
DrawerArrowStyle</item>
</style>
<style name="DrawerArrowStyle"
parent="Widget.AppCompat.DrawerArrowToggle">
<item name="spinBars">true</item>
<item name="color">@android:color/white</item>
</style>
Google Photo
spinBarsを回転させるかどうか
style.xml
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/parent_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<include
android:id="@+id/toolbar"
layout="@layout/tool_bar"/>
<android.support.v4.widget.DrawerLayout
android:id=“@+id/drawer_layout
…
Google Photo
DrawerLayoutに親を作り、その間にToolBar
activiy_hoge.xml
• ToolBarに重なる
Google Music
• ToolBarに重なる
• StatusBarを

暗くする
Fril
<style name=“Theme.Fril" parent="BaseTheme">
<item name=“android:windowTranslucentStatus">true</
item>
</style>
Fril
StatusBarが透過する
v19からなので、styleを分ける
value-v19/styles.xml
Fril
StatusBarを透過した分だけ調節する
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:fitsSystemWindows="true"
android:layout_width="match_parent"
android:layout_height="match_parent">
…
activity_hoge.xml
Fril
Statusbarの色を指定する
…
mDrawerLayout =
(DrawerLayout)findViewById(R.id.drawer_layout);
…
mDrawerLayout.setStatusBarBackgroundColor(Color.parseColor
("#ff6600"));
…
HogeActivity.java
• StatusBarに重なる
• Drawerの中身も

StatusBarに

描画される
Google Play
StatusBarの部分の描画を許可する
StatusBarの色を無色にする
v16からなのでstyleを分ける
StatusBarを透過にするのではなく重なる部分を透過に見せている
values-v16/styles.xml
Google Play
<style name="Theme.Mail" parent="BaseTheme">
<item
name="android:windowDrawsSystemBarBackgrounds">true</
item>
<item name="android:statusBarColor">@android:color/
transparent</item>
</style>
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:fitsSystemWindows="true"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="vertical"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent">
<include
layout="@layout/tool_bar"/>
</LinearLayout>
<com.sakebook.android.sample.navigationdrawersample.ui.ScrimInsetsFrameLayout
xmlns:app="http://schemas.android.com/apk/res-auto"
app:insetForeground="#80000000"
android:id="@+id/parent_drawer"
android:fitsSystemWindows="true"
android:layout_gravity="start"
android:layout_width="match_parent"
android:layout_height="match_parent">
…
</com.sakebook.android.sample.navigationdrawersample.ui.ScrimInsetsFrameLayout>
</android.support.v4.widget.DrawerLayout>
activity_hoge.xmlGoogle Play
}
}
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:fitsSystemWindows="true"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="vertical"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent">
<include
layout="@layout/tool_bar"/>
</LinearLayout>
StatusBarが描画可能になった分だけ調節する
ToolBarが隠れるのを防ぐ
activity_hoge.xmlGoogle Play
<com.sakebook.android.sample.navigationdrawersample.ui.ScrimInsetsFrameLayout
xmlns:app="http://schemas.android.com/apk/res-auto"
app:insetForeground="#80000000"
android:id="@+id/parent_drawer"
android:fitsSystemWindows="true"
android:layout_gravity="start"
android:layout_width="match_parent"
android:layout_height="match_parent">
…
</com.sakebook.android.sample.navigationdrawersample.ui.ScrimInsetsFrameLayout>
</android.support.v4.widget.DrawerLayout>
FrameLayoutを拡張したカスタムレイアウト
ScrimInsetsFrameLayout (by iosched)
activity_hoge.xmlGoogle Play
app:insetForeground を定義する
attrs.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="ScrimInsetsView">
<attr name="insetForeground" format="reference|color" />
</declare-styleable>
</resources>
Google Play
FrameLayoutを拡張したカスタムレイアウト
ScrimInsetsFrameLayout (by iosched)
ScrimInsetsFrameLayoutGoogle Play
private void init(Context context, AttributeSet attrs, int defStyle) {
final TypedArray a = context.obtainStyledAttributes(attrs,
R.styleable.ScrimInsetsView, defStyle, 0);
if (a == null) {
return;
}
mInsetForeground = a.getDrawable(R.styleable.ScrimInsetsView_insetForeground);
a.recycle();
setWillNotDraw(true);
}
@Override
protected boolean fitSystemWindows(Rect insets) {
mInsets = new Rect(insets);
setWillNotDraw(mInsetForeground == null);
ViewCompat.postInvalidateOnAnimation(this);
if (mOnInsetsCallback != null) {
mOnInsetsCallback.onInsetsChanged(insets);
}
return true; // consume insets
}
• 透過させているの

ではなく、

StatusBarに重なる部分に
半透明の色をつけている
Google Play
理解したところで
Drawerだけでもやることいっぱい
http://www.google.com/design/spec/patterns/navigation-
drawer.html
ライブラリで楽しよう
https://github.com/mikepenz/MaterialDrawer
https://github.com/neokree/MaterialNavigationDrawer
https://github.com/rudsonlive/NavigationDrawer-
MaterialDesign
https://github.com/kanytu/android-material-drawer-
template
https://github.com/HeinrichReimer/material-drawer
以上
https://github.com/sakebook/android-sample-
NavigationDrawerSample

More Related Content

Similar to Material Designなdrawerを実装したい

2012年8月10日 勉強会
2012年8月10日 勉強会2012年8月10日 勉強会
2012年8月10日 勉強会Rin Yano
 
jQuery Mobile 最新情報 & Tips
jQuery Mobile 最新情報 & TipsjQuery Mobile 最新情報 & Tips
jQuery Mobile 最新情報 & Tipsyoshikawa_t
 
XPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイド
XPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイドXPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイド
XPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイドTetsuji Hayashi
 
Magento meet up Tokyo#1 for Design
Magento meet up Tokyo#1 for DesignMagento meet up Tokyo#1 for Design
Magento meet up Tokyo#1 for DesignMiho Nakano
 
はじめよう Backbone.js
はじめよう Backbone.jsはじめよう Backbone.js
はじめよう Backbone.jsHiroki Toyokawa
 
Style Guide活用のススメ
Style Guide活用のススメStyle Guide活用のススメ
Style Guide活用のススメShigeki Ohtsuki
 
jQuery MobileとPhoneGapでスマートフォンアプリ楽々クッキング
 jQuery MobileとPhoneGapでスマートフォンアプリ楽々クッキング jQuery MobileとPhoneGapでスマートフォンアプリ楽々クッキング
jQuery MobileとPhoneGapでスマートフォンアプリ楽々クッキングTakashi Okamoto
 
Polymerやってみた
PolymerやってみたPolymerやってみた
PolymerやってみたYosuke Onoue
 
JavaScriptテンプレートエンジンで活かすData API
JavaScriptテンプレートエンジンで活かすData APIJavaScriptテンプレートエンジンで活かすData API
JavaScriptテンプレートエンジンで活かすData APIHajime Fujimoto
 
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframeworkSpring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframeworkToshiaki Maki
 
JJUG CCC 2011 Fall / Web test automation with Geb and Spock
JJUG CCC 2011 Fall / Web test automation with Geb and SpockJJUG CCC 2011 Fall / Web test automation with Geb and Spock
JJUG CCC 2011 Fall / Web test automation with Geb and SpockNobuhiro Sue
 
⑱jQueryをおぼえよう!その4
⑱jQueryをおぼえよう!その4⑱jQueryをおぼえよう!その4
⑱jQueryをおぼえよう!その4Nishida Kansuke
 
芸術情報演習デザイン(Web) 第8回: CSSフレームワークを使う
芸術情報演習デザイン(Web)  第8回: CSSフレームワークを使う芸術情報演習デザイン(Web)  第8回: CSSフレームワークを使う
芸術情報演習デザイン(Web) 第8回: CSSフレームワークを使うAtsushi Tadokoro
 
ABC 2011 Summer
ABC 2011 SummerABC 2011 Summer
ABC 2011 Summermiyatay
 
閉じタグを超えた先に僕が見た景色とは
閉じタグを超えた先に僕が見た景色とは閉じタグを超えた先に僕が見た景色とは
閉じタグを超えた先に僕が見た景色とはMuyuu Fujita
 

Similar to Material Designなdrawerを実装したい (20)

2012年8月10日 勉強会
2012年8月10日 勉強会2012年8月10日 勉強会
2012年8月10日 勉強会
 
jQuery Mobile 最新情報 & Tips
jQuery Mobile 最新情報 & TipsjQuery Mobile 最新情報 & Tips
jQuery Mobile 最新情報 & Tips
 
XPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイド
XPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイドXPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイド
XPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイド
 
jQuery Mobileの基礎
jQuery Mobileの基礎jQuery Mobileの基礎
jQuery Mobileの基礎
 
Magento meet up Tokyo#1 for Design
Magento meet up Tokyo#1 for DesignMagento meet up Tokyo#1 for Design
Magento meet up Tokyo#1 for Design
 
はじめよう Backbone.js
はじめよう Backbone.jsはじめよう Backbone.js
はじめよう Backbone.js
 
Style Guide活用のススメ
Style Guide活用のススメStyle Guide活用のススメ
Style Guide活用のススメ
 
Jqm20120804 publish
Jqm20120804 publishJqm20120804 publish
Jqm20120804 publish
 
jQuery MobileとPhoneGapでスマートフォンアプリ楽々クッキング
 jQuery MobileとPhoneGapでスマートフォンアプリ楽々クッキング jQuery MobileとPhoneGapでスマートフォンアプリ楽々クッキング
jQuery MobileとPhoneGapでスマートフォンアプリ楽々クッキング
 
Polymerやってみた
PolymerやってみたPolymerやってみた
Polymerやってみた
 
JavaScriptテンプレートエンジンで活かすData API
JavaScriptテンプレートエンジンで活かすData APIJavaScriptテンプレートエンジンで活かすData API
JavaScriptテンプレートエンジンで活かすData API
 
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframeworkSpring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework
 
JJUG CCC 2011 Fall / Web test automation with Geb and Spock
JJUG CCC 2011 Fall / Web test automation with Geb and SpockJJUG CCC 2011 Fall / Web test automation with Geb and Spock
JJUG CCC 2011 Fall / Web test automation with Geb and Spock
 
⑱jQueryをおぼえよう!その4
⑱jQueryをおぼえよう!その4⑱jQueryをおぼえよう!その4
⑱jQueryをおぼえよう!その4
 
芸術情報演習デザイン(Web) 第8回: CSSフレームワークを使う
芸術情報演習デザイン(Web)  第8回: CSSフレームワークを使う芸術情報演習デザイン(Web)  第8回: CSSフレームワークを使う
芸術情報演習デザイン(Web) 第8回: CSSフレームワークを使う
 
jQuery Mobile
jQuery MobilejQuery Mobile
jQuery Mobile
 
sgvizler
sgvizlersgvizler
sgvizler
 
ABC 2011 Summer
ABC 2011 SummerABC 2011 Summer
ABC 2011 Summer
 
ABC
ABC ABC
ABC
 
閉じタグを超えた先に僕が見た景色とは
閉じタグを超えた先に僕が見た景色とは閉じタグを超えた先に僕が見た景色とは
閉じタグを超えた先に僕が見た景色とは
 

More from shinya sakemoto

ScreenshotをPCから手軽に扱えるようにしたい
ScreenshotをPCから手軽に扱えるようにしたいScreenshotをPCから手軽に扱えるようにしたい
ScreenshotをPCから手軽に扱えるようにしたいshinya sakemoto
 
Gitpodでブラウザからflutterで開発する
Gitpodでブラウザからflutterで開発するGitpodでブラウザからflutterで開発する
Gitpodでブラウザからflutterで開発するshinya sakemoto
 
Flutter for Webで値を保存する
Flutter for Webで値を保存するFlutter for Webで値を保存する
Flutter for Webで値を保存するshinya sakemoto
 
チュートリアルをリッチにしよう
チュートリアルをリッチにしようチュートリアルをリッチにしよう
チュートリアルをリッチにしようshinya sakemoto
 
Gradleプラグインを作成してみた
Gradleプラグインを作成してみたGradleプラグインを作成してみた
Gradleプラグインを作成してみたshinya sakemoto
 
Google Play Developer APIを使ってみた
Google Play Developer APIを使ってみたGoogle Play Developer APIを使ってみた
Google Play Developer APIを使ってみたshinya sakemoto
 
インストールリファラでハマった話
インストールリファラでハマった話インストールリファラでハマった話
インストールリファラでハマった話shinya sakemoto
 
ちょっと優しい入力項目
ちょっと優しい入力項目ちょっと優しい入力項目
ちょっと優しい入力項目shinya sakemoto
 
foursquareの楽しみ方
foursquareの楽しみ方foursquareの楽しみ方
foursquareの楽しみ方shinya sakemoto
 

More from shinya sakemoto (14)

ScreenshotをPCから手軽に扱えるようにしたい
ScreenshotをPCから手軽に扱えるようにしたいScreenshotをPCから手軽に扱えるようにしたい
ScreenshotをPCから手軽に扱えるようにしたい
 
Gitpodでブラウザからflutterで開発する
Gitpodでブラウザからflutterで開発するGitpodでブラウザからflutterで開発する
Gitpodでブラウザからflutterで開発する
 
Flutter for Webで値を保存する
Flutter for Webで値を保存するFlutter for Webで値を保存する
Flutter for Webで値を保存する
 
チュートリアルをリッチにしよう
チュートリアルをリッチにしようチュートリアルをリッチにしよう
チュートリアルをリッチにしよう
 
Android study part5
Android study part5Android study part5
Android study part5
 
Android study part4
Android study part4Android study part4
Android study part4
 
Android study part3
Android study part3Android study part3
Android study part3
 
Android study part2
Android study part2Android study part2
Android study part2
 
Android study part1
Android study part1Android study part1
Android study part1
 
Gradleプラグインを作成してみた
Gradleプラグインを作成してみたGradleプラグインを作成してみた
Gradleプラグインを作成してみた
 
Google Play Developer APIを使ってみた
Google Play Developer APIを使ってみたGoogle Play Developer APIを使ってみた
Google Play Developer APIを使ってみた
 
インストールリファラでハマった話
インストールリファラでハマった話インストールリファラでハマった話
インストールリファラでハマった話
 
ちょっと優しい入力項目
ちょっと優しい入力項目ちょっと優しい入力項目
ちょっと優しい入力項目
 
foursquareの楽しみ方
foursquareの楽しみ方foursquareの楽しみ方
foursquareの楽しみ方
 

Material Designなdrawerを実装したい