Android Studioによって事前に作成された標準のナビゲーションドロワーがあり、それにいくつかのグループを追加したいと考えています。これから始めました。
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android">
<group Android:checkableBehavior="single">
<item
Android:id="@+id/nav_mode_person"
Android:icon="@drawable/ic_person_black_24dp"
Android:title="Person" />
<item
Android:id="@+id/nav_mode_group"
Android:icon="@drawable/ic_group_black_24dp"
Android:title="Community" />
</group>
<item Android:title="Communicate">
<menu>
<item
Android:id="@+id/nav_share"
Android:icon="@drawable/ic_menu_share"
Android:title="Share" />
<item
Android:id="@+id/nav_send"
Android:icon="@drawable/ic_menu_send"
Android:title="Send" />
</menu>
</item>
</menu>
しかし、各グループにタイトルを付けることさえ可能であるならば、私が得なかったものは何ですか?つまり、Android:title
オプションが<item>
s、ただし<group>
sそして、アイテムをグループでラップしようとすると、厄介なエントリの動作が発生します。
Navigation Drawerに関するGoogleのデザインガイドラインを読みましたが、グループに独自の名前を付けるべきか、付けるべきではないのかという点を逃しました。これが私が達成したいことの写真です:
ランダムに追加せずに可能ですか<TextView>
s?ちなみに、プログラムではなく、XMLでやりたいのです。
そうです、グループにタイトルを付けることはできません。唯一のオプションは、グループを<item>
および<menu>
タグに次のようにラップすることです
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:title="General">
<menu>
<group Android:checkableBehavior="single">
<item
Android:id="@+id/nav_camera"
Android:icon="@drawable/ic_menu_camera"
Android:title="Import" />
<item
Android:id="@+id/nav_gallery"
Android:icon="@drawable/ic_menu_gallery"
Android:title="Gallery" />
</group>
</menu>
</item>
<item Android:title="Communicate">
<menu>
<item
Android:id="@+id/nav_share"
Android:icon="@drawable/ic_menu_share"
Android:title="Share" />
<item
Android:id="@+id/nav_send"
Android:icon="@drawable/ic_menu_send"
Android:title="Send" />
</menu>
</item>
</menu>
このようなナビゲーションドロワーメニューが表示されます
また、Android:checkableBehavior="single"
からのアイテムとFirst Category
からのアイテムの2つが選択されないように、Second Category
の外部グループが必要です。これが実際のコードです。
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android">
<group Android:checkableBehavior="single">
<item
Android:title="First Category">
<menu>
<group
Android:id="@+id/menu_top"
Android:checkableBehavior="single">
<item
Android:id="@+id/id1"
Android:icon="@drawable/drawable1"
Android:title="Title1" />
<item
Android:id="@+id/id2"
Android:icon="@drawable/drawable2"
Android:title="Title2" />
</group>
</menu>
</item>
<item
Android:title="Second Category">
<menu>
<group
Android:id="@+id/menu_bottom"
Android:checkableBehavior="single">
<item
Android:id="@+id/id3"
Android:icon="@drawable/drawable3"
Android:title="Title3" />
<item
Android:id="@+id/id4"
Android:icon="@drawable/drawable4"
Android:title="Title4" />
</group>
</menu>
</item>
</group>
</menu>
ここでは、メニューを作成する方法を明確に示します。
http://developer.Android.com/guide/topics/ui/menus.html
したがって、あなたのケースでは、この順序でリストを作成しますitem-> menu-> group。つまり、
<item Android:title="Title">
<menu>
<group Android:checkableBehavior="single">
<item Android:id="@+id/nav_share"
Android:icon="@drawable/ic_menu_share"
Android:title="Share" />
<item
Android:id="@+id/nav_send"
Android:icon="@drawable/ic_menu_send"
Android:title="Send" />
. . .
. . .
xMLクラスを追加navigation_drawer_title
:
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="wrap_content"
Android:text="communicate"
Android:layout_height="wrap_content"/>
navigationAdapter
を次のように変更します
private static final int TYPE_HEADER = 0;
private static final int TYPE_ITEM = 1;
private static final int TYPE_SEPARATOR = 2;
private static final int TYPE_TITLE = 3;
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
{
View v = null;
switch (viewType)
{
case TYPE_HEADER:
v = LayoutInflater.from(parent.getContext()).inflate(R.layout.navigation_drawer_header, parent, false); //Inflating the layout
break;
case TYPE_ITEM:
v = LayoutInflater.from(parent.getContext()).inflate(R.layout.navigation_drawer_item, parent, false); //Inflating the layout
break;
case TYPE_SEPARATOR:
v = LayoutInflater.from(parent.getContext()).inflate(R.layout.navigation_drawer_separator, parent, false); //Inflating the layout
break;
case TYPE_TITLE:
v = LayoutInflater.from(parent.getContext()).inflate(R.layout.navigation_drawer_title, parent, false); //Inflating the layout
break;
}
return new ViewHolder(v, viewType); // Returning the created object
}
そして
@Override
public int getItemViewType(int position)
{
if (position == 0)
return TYPE_HEADER;
if (navMenuItems.get(position - 1).getItemType() == NavItemType.Group)
return TYPE_SEPARATOR;
if (navMenuItems.get(position - 2).getItemType() == NavItemType.Group)
return TYPE_TITLE
return TYPE_ITEM;
}