【问题标题】:NavigationView - Setting `app:itemBackground` causes menu items to lose start paddingNavigationView - 设置 `app:itemBackground` 会导致菜单项丢失开始填充
【发布时间】:2023-04-07 11:16:01
【问题描述】:

在为 NavigationView 设置 app:itemBackground 时遇到问题。我正在尝试为所选菜单项创建自定义背景。自定义背景可以工作,但是当我使用它时,它似乎会杀死菜单项的开始填充。

无背景(默认)

带有自定义背景

当设置itemBackground 时,您可以看到菜单项与菜单左侧齐平。

这里是相关的xml...

布局

 <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/DrawerLayout"
    android:fitsSystemWindows="false">
<!-- your content layout -->
    <include
        layout="@layout/MainLayout" />
    <android.support.design.widget.NavigationView
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:background="@color/primary_color"
        android:id="@+id/NavigationView"
        app:itemTextColor="?android:textColorPrimary"
        app:headerLayout="@layout/navigationheaderlayout"
        app:itemBackground="@drawable/navigation_item_selector"
        app:menu="@menu/navigation_menu" />
</android.support.v4.widget.DrawerLayout>

选择器

<selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:drawable="@drawable/navigation_item_selected_background" android:state_selected="true" />
   <item android:drawable="@drawable/navigation_item_selected_background" android:state_pressed="true" />
   <item android:drawable="@drawable/navigation_item_selected_background" android:state_checked="true" />
   <item android:drawable="@drawable/navigation_item_not_selected_background" />
</selector>

选定的背景

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item 
        android:left="0dp" 
        android:right="2dp" 
        android:drawable="@color/accent_color" />

    <item 
        android:left="2dp" 
        android:right="2dp" 
        android:drawable="@color/navigation_selected_item_color" />
</layer-list>

未选择背景

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
   <item>
       <shape android:shape="rectangle">
           <solid android:color="@android:color/transparent" />
       </shape>
   </item>
</layer-list>

以前有没有人遇到过这样的事情?

【问题讨论】:

  • 您需要在段落和代码之间留 1 个空行。在你编辑之前我已经修好了:)
  • 谢谢...我想知道到底发生了什么
  • 恕我直言,您使用可绘制对象覆盖了一些默认值。我知道使用stetho查看发生了什么的唯一方法。

标签: android xamarin xamarin.android navigationview android-navigationview


【解决方案1】:

请注意,以下解决方案适用于棒棒糖之前的版本。但会在棒棒糖及更高版本中添加额外的填充。请为不同的版本应用不同的主题以避免这种情况。

设置 app:theme 后,padding left 问题已修复。

<android.support.design.widget.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:fitsSystemWindows="false"
        android:background="@drawable/your_menu_bg"
        app:itemBackground="@drawable/your_menu_item_bg"
        app:headerLayout="@layout/nav_header_main"
        app:menu="@menu/activity_main_drawer"
        app:theme="@style/NavigationDrawerStyle"
        app:itemIconTint="@color/your_color"
        app:itemTextColor="@android:color/white"
        app:itemTextAppearance="?android:attr/textAppearanceLarge"/>

这是我的自定义主题。

<style name="NavigationDrawerStyle">
    <item name="android:paddingLeft">20dp</item>
</style>

如何为不同的版本应用不同的主题?检查下面的另一个链接。

Change theme according to android version

【讨论】:

  • 太棒了。今晚我会测试一下。
  • @RyanAlford 这个解决方案对你有用吗?我面临同样的问题,这没有帮助。
【解决方案2】:

为 Android 4 版本在可绘制对象中图层列表的末尾添加一个填充。

像这样:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item 
        android:left="0dp" 
        android:right="2dp" 
        android:drawable="@color/accent_color" />

    <item 
        android:left="2dp" 
        android:right="2dp" 
        android:drawable="@color/navigation_selected_item_color" />
    <item>
        <shape android:shape="rectangle" >
            <padding android:left="12dp" android:right="12dp"/>
        </shape>
    </item>
</layer-list>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多