基于此Developer Guide,我将导航抽屉添加到了我的应用中。打开导航看起来像这样。
我想在左侧使用图标的灰色方块是什么?
我的导航图XML看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/nav_graph"
app:startDestination="@id/commandFragment">
<fragment
android:id="@+id/completedCommandsFragment"
android:name="io.dailyunix.CompletedCommandsFragment"
android:label="Completed commands"
android:icon="@+id/ic_menu_info_details"
tools:layout="@layout/fragment_list" >
</fragment>
<fragment
android:id="@+id/remainingCommandsFragment"
android:name="io.dailyunix.RemainingCommandsFragment"
android:label="Remaining commands"
tools:layout="@layout/fragment_list" >
</fragment>
<fragment
android:id="@+id/commandFragment"
android:name="io.dailyunix.CommandFragment"
android:label="Command"
tools:layout="@layout/fragment_command" >
<argument
android:name="command"
app:argType="string" />
</fragment>
<action
android:id="@+id/action_global_commandFragment"
app:destination="@id/commandFragment" />
</navigation>
添加此属性似乎无济于事:
android:icon="@+id/ic_menu_info_details"
我不必在导航中为项目添加任何布局,所以我不知道它在做什么。我也没有在导航代码实验室中提到如何执行此操作。
[编辑]
DevMike01指出,我应使用@drawable/
而不是@+id/
来引用图标(duh)。但是解决此问题似乎不足以解决问题。这是布局检查器的屏幕截图。
[编辑2]
类似的事情可以在“活动”中以编程方式完成:
override fun onCreate(savedInstanceState: Bundle?) {
...
navigation.menu.getItem(0).icon = getDrawable(R.drawable.ic_completed)
navigation.menu.getItem(1).icon = getDrawable(R.drawable.ic_remaining)
...
}
但这是远距离和脆弱的动作。我宁愿在XML中执行此操作。
答案 0 :(得分:2)
将图标保存在drawable文件夹中,并假定该图标的名称为@drawable/ic_menu_info_details
,更改对此ic_menu_info_details
的引用方式。 @+id/...
用于为视图分配ID。
答案 1 :(得分:0)
您可以通过在菜单XML文件中添加android:icon
属性来设置抽屉图标。
示例:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:id="@+id/primary">
<item
android:id="@id/home_dest"
android:icon="@drawable/ic_home"
android:title="@string/home" />
<item
android:id="@id/deeplink_dest"
android:icon="@drawable/ic_android"
android:title="@string/deeplink" />
</group>
<item
android:id="@+id/settings_dest"
android:icon="@drawable/ic_settings"
android:title="@string/settings" />
</menu>
在这里,您的res / drawable需求必须具有可以从android资源中获取的最上面引用的图标(ic_android,ic_settings,home_dest)
( res > RClick > New > Image Assets / Vector Assets)
答案 2 :(得分:0)
事实证明,我确实确实遗忘了另一个文件menu/nav.xml
:
<item android:id="@+id/completedCommandsFragment"
android:icon="@drawable/ic_completed"
android:title="@string/completed"
app:showAsAction="ifRoom" />
<item android:id="@+id/remainingCommandsFragment"
android:icon="@drawable/ic_remaining"
android:title="@string/remaining"
app:showAsAction="ifRoom" />
我认为我的菜单项是由导航组件根据我的navigation/nav_graph.xml
文件动态生成的,但事实并非如此。我需要使这两个文件保持同步,并使用menu/nav.xml
作为图标。看来menu/nav.xml
中项目标签上的ID必须与navigation/nav_graph.xml
中片段标签上的ID匹配。