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

やり方
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の実装
ナビゲーションドロワーのレイアウトファイルを作る。
次は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)





