ナビゲーションドロワーのカスタマイズ


Pocket

ナビゲーションドロワーをカスタマイズしてみました。
ドロワーにはListViewを使用するというのが一般的だと思いますが、より見た目をカスタマイズするための方法を試してみました。
 

やったこと

ドロワーにImageViewやButtonを貼っつけてみた。
custom_drawer
 
 

やり方

1.activity_main.xmlの編集

DrawerLayoutのdrawer部分にFragmentを設定

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >
    
    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

	<fragment
	    android:id="@+id/left_drawer"
	    android:name="com.example.customdrawer.CustomDrawerFragment"
	    android:layout_width="match_parent"
	    android:layout_height="match_parent"
	    android:layout_gravity="start" />
    
</android.support.v4.widget.DrawerLayout>

 

2.Fragmentの実装

ナビゲーションドロワーのレイアウトファイルを作る。

drawer_list
 

次はFragmentを実装。

public class CustomDrawerFragment extends Fragment {

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
		View v = inflater.inflate(R.layout.drawer_list, container, false);

		Button btn = (Button)v.findViewById(R.id.button1);
		btn.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				Toast.makeText(getActivity(), "Button Click", Toast.LENGTH_LONG).show();
				((MainActivity)getActivity()).getDrawer().closeDrawers();
			}
		});
		
		TextView text = (TextView)v.findViewById(R.id.textView3);
		text.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				Toast.makeText(getActivity(), "Text Click", Toast.LENGTH_LONG).show();
				((MainActivity)getActivity()).getDrawer().closeDrawers();
			}
		});
		return v;
	}

}

ボタンやテキストをクリックするとToastを表示してドロワーを閉じるようにしています。
Fragmentからは直接ドロワーにアクセスできないので、MainActivityにgetDrawer()メソッドを追加しています。

public class MainActivity extends Activity {
	private DrawerLayout mDrawerLayout;

        /* 省略 */

	public DrawerLayout getDrawer() {
		return mDrawerLayout;
	}
}

 

以上です。
 

今回のコード全体は下記に置いてあります。
https://github.com/workpiles/CustomDrawer
 
 

一風変わったドロワーにカスタマイズできると思ってやってみました。
FragmentにDrawerLayoutを渡しているあたりが今イチですが。
#まだMainActivity.javaの1ファイルで実装したほうがよかったかな

今のところ今回のやり方を使いう予定はないのですが、いつか使うかも・・・
#いやぁ~使わないだろうな・・・UIは統一しておいたほうが無難だと思うし(Navigation-Drawer
 
 

Leave a Comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です