Android 具有内部间距的 NavigationView
Android NavigationView with internal spacing
我目前正在开发一个支持 NavigationView 的 Android 应用程序。我必须质疑如何按照我的意愿制作它:
(1) 我想将导航元素分为两个区域:一个在 header 下方的顶部,一个在底部。
(2) 我想去掉分隔符和它下面的元素之间的填充。
外观与应有的外观:
我知道有一种方法可以覆盖填充值,这将修复 (2)。但这感觉有点脏,也许还有另一种方法可以同时实现这两个目标。我的想法是获取 "Settings" 元素并以编程方式更改其布局,但到目前为止我还没有找到实现该功能的方法。还是我真的必须自己构建页脚?
此外,我不太确定应该使用谷歌搜索哪些流行语。也许那里已经有了一个简单的答案。
我当前的代码。目前 Activity 内没有布局变化,因此我没有添加它。
activity_main.xml:
<android.support.v4.widget.DrawerLayout 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/main_drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context=".main.MainActivity">
<!-- The content -->
<LinearLayout>...</LinearLayout>
<!-- The navigation drawer -->
<android.support.design.widget.NavigationView
android:id="@+id/main_navigationview"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="@android:color/white"
app:headerLayout="@layout/mainnav_header"
app:itemBackground="@drawable/menu_background"
app:itemIconTint="@color/menu_text"
app:itemTextColor="@color/menu_text"
app:menu="@menu/maindrawer">
</android.support.design.widget.NavigationView>
</android.support.v4.widget.DrawerLayout>
menu.xml:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<group android:id="@+id/main_drawer_menu1" android:checkableBehavior="single">
<item
android:id="@+id/main_navigationview_request"
android:checkable="false"
android:enabled="false"
android:icon="@drawable/ic_navigationdrawer_request"
android:title="@string/main_navigation_request"
app:actionLayout="@layout/menuitem_default" />
<item
android:id="@+id/main_navigationview_invitations"
android:checked="true"
android:icon="@drawable/ic_navigationdrawer_invitations"
android:title="@string/main_navigation_invitations"
app:actionLayout="@layout/menuitem_default" />
<item
android:id="@+id/main_navigationview_prev"
android:icon="@drawable/ic_navigationdrawer_previous"
android:title="@string/main_navigation_previnvites"
app:actionLayout="@layout/menuitem_default" />
<item
android:id="@+id/main_navigationview_info"
android:icon="@drawable/ic_navigationdrawer_info"
android:title="@string/main_navigation_info"
app:actionLayout="@layout/menuitem_default" />
</group>
<group android:id="@+id/main_drawer_menu2" android:checkableBehavior="single">
<item
android:id="@+id/main_navigationview_settings"
android:checked="true"
android:icon="@drawable/ic_navigationdrawer_settings"
android:title="@string/main_navigation_settings"
app:actionLayout="@layout/menuitem_default" />
<item
android:id="@+id/main_navigationview_logout"
android:icon="@drawable/ic_navigationdrawer_logout"
android:title="@string/main_navigation_logout"
app:actionLayout="@layout/menuitem_caution" />
</group>
此行删除图标和文本之间的填充。
仅在 dimen.xml 文件中添加以下行
<dimen tools:override="true" name="design_navigation_icon_padding">10dp</dimen>
我目前正在开发一个支持 NavigationView 的 Android 应用程序。我必须质疑如何按照我的意愿制作它: (1) 我想将导航元素分为两个区域:一个在 header 下方的顶部,一个在底部。 (2) 我想去掉分隔符和它下面的元素之间的填充。
外观与应有的外观:
我知道有一种方法可以覆盖填充值,这将修复 (2)。但这感觉有点脏,也许还有另一种方法可以同时实现这两个目标。我的想法是获取 "Settings" 元素并以编程方式更改其布局,但到目前为止我还没有找到实现该功能的方法。还是我真的必须自己构建页脚?
此外,我不太确定应该使用谷歌搜索哪些流行语。也许那里已经有了一个简单的答案。
我当前的代码。目前 Activity 内没有布局变化,因此我没有添加它。
activity_main.xml:
<android.support.v4.widget.DrawerLayout 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/main_drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context=".main.MainActivity">
<!-- The content -->
<LinearLayout>...</LinearLayout>
<!-- The navigation drawer -->
<android.support.design.widget.NavigationView
android:id="@+id/main_navigationview"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="@android:color/white"
app:headerLayout="@layout/mainnav_header"
app:itemBackground="@drawable/menu_background"
app:itemIconTint="@color/menu_text"
app:itemTextColor="@color/menu_text"
app:menu="@menu/maindrawer">
</android.support.design.widget.NavigationView>
</android.support.v4.widget.DrawerLayout>
menu.xml:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<group android:id="@+id/main_drawer_menu1" android:checkableBehavior="single">
<item
android:id="@+id/main_navigationview_request"
android:checkable="false"
android:enabled="false"
android:icon="@drawable/ic_navigationdrawer_request"
android:title="@string/main_navigation_request"
app:actionLayout="@layout/menuitem_default" />
<item
android:id="@+id/main_navigationview_invitations"
android:checked="true"
android:icon="@drawable/ic_navigationdrawer_invitations"
android:title="@string/main_navigation_invitations"
app:actionLayout="@layout/menuitem_default" />
<item
android:id="@+id/main_navigationview_prev"
android:icon="@drawable/ic_navigationdrawer_previous"
android:title="@string/main_navigation_previnvites"
app:actionLayout="@layout/menuitem_default" />
<item
android:id="@+id/main_navigationview_info"
android:icon="@drawable/ic_navigationdrawer_info"
android:title="@string/main_navigation_info"
app:actionLayout="@layout/menuitem_default" />
</group>
<group android:id="@+id/main_drawer_menu2" android:checkableBehavior="single">
<item
android:id="@+id/main_navigationview_settings"
android:checked="true"
android:icon="@drawable/ic_navigationdrawer_settings"
android:title="@string/main_navigation_settings"
app:actionLayout="@layout/menuitem_default" />
<item
android:id="@+id/main_navigationview_logout"
android:icon="@drawable/ic_navigationdrawer_logout"
android:title="@string/main_navigation_logout"
app:actionLayout="@layout/menuitem_caution" />
</group>
此行删除图标和文本之间的填充。
仅在 dimen.xml 文件中添加以下行
<dimen tools:override="true" name="design_navigation_icon_padding">10dp</dimen>