【发布时间】:2016-01-27 21:03:59
【问题描述】:
我在导航抽屉中使用支持 NavigationView 来显示项目菜单。
<android.support.design.widget.NavigationView
android:id="@+id/drawer_navigation"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="@drawable/drawable_background"
app:headerLayout="@layout/drawer_header"
app:itemBackground="@drawable/drawer_item_background"
app:itemIconTint="@color/drawer_item"
app:itemTextColor="@color/drawer_item"
app:menu="@menu/drawer"
app:theme="@style/Text.DrawerItem"/>
我想在菜单项旁边显示连接请求计数器。
我尝试在 XML 菜单定义中像这样设置actionLayout
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<group android:checkableBehavior="single">
...
<item
android:id="@+id/navigation_requests"
android:icon="@drawable/ic_swap_horiz_24dp"
android:title="@string/connect_menu_connection_requests"
app:actionLayout="@layout/connection_request_counter"
app:showAsAction="always"/>
...
</group>
</menu>
ActionView 的布局connection_request_counter.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:textColor="@color/brand_blue"
android:text="5"/>
但此时我看不到项目旁边的数字 5。
我也尝试过以编程方式设置 ActionLayout:
MenuItemCompat.setActionView(mMenu.findItem(R.id.navigation_requests), R.layout.connection_request_counter);
但还是没有运气。
我可以像这样获得对 TextView 的引用
final TextView connectionRequestCounterView
= (TextView) MenuItemCompat.getActionView(mMenu.findItem(R.id.navigation_requests));
它实际上返回了一个 TextView 实例,但即使我为它设置了一个文本,我也看不到布局中的任何内容。这可能与我正在设计菜单项的样式有关吗? (我设置了菜单项的文本颜色、色调和背景)
这是我的风格:
<style name="Text.DrawerItem">
<item name="android:textColor">@color/text_color_dark_grey</item>
<item name="android:textSize">@dimen/text_size_default</item>
<item name="android:clickable">false</item>
<item name="android:textColorLink">@color/text_color_dark_grey</item>
<item name="fontPath">@string/font_aller_light</item>
<!--<item name="android:background">@color/background_activity_default</item>-->
<!--<item name="background">@color/background_activity_default</item>-->
</style>
drawer_item_background.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!--To override the default grey background for selected item-->
<item android:drawable="@android:color/transparent" android:state_checked="true"/>
<item android:drawable="@android:color/transparent"/>
</selector>
和drawer_drawablbe.xml:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<solid android:color="@color/background_activity_default"/>
</shape>
</item>
<item
android:bottom="24dp"
android:left="16dp">
<bitmap
android:gravity="left|bottom"
android:src="@drawable/my_drawer_logo"/>
</item>
</layer-list>
@drawable/my_drawer_logo 是不同密度的 PNG。
还有什么我看不到动作视图的想法吗?
【问题讨论】:
-
我已尝试重新创建问题,但运行您的代码没有问题。可以分享
@style/Text.DrawerItem吗? -
其实,继续创建issue没有成功,你能不能把“@drawable/drawer_item_background”和“@drawable/drawable_background”也一样?
-
@OYRM 非常感谢您对此进行调查。我已经发布了我的样式和背景可绘制对象。但是,我尝试删除背景可绘制对象,但没有帮助。
-
@OYRM 我刚刚检查了视图层次结构,也看不到那里的视图。即使在代码中我得到了对 TextView 的引用,并且可以毫无例外地为其设置文本。我很困惑。
标签: android navigation-drawer android-support-library