如何在导航抽屉中克服此项目填充?

时间:2016-10-07 09:10:21

标签: android android-layout navigation-drawer

我查看了所有问题并且还谷歌了很多我只想在导航视图中的每个项目之间删除此填充。帮助我提前解决这个问题。

这是我的main_drawer的代码

<?xml version="1.0" encoding="utf-8"?>
<menu  xmlns:android="http://schemas.android.com/apk/res/android">


    <group android:checkableBehavior="single" android:id="@+id/home1"
        >
        <item
            android:id="@+id/home"
            android:title="Home"

            />
        </group>
    <group android:checkableBehavior="single" android:id="@+id/aboutus1">
        <item

            android:id="@+id/nav_camera"


            android:title="AboutUs" />
        </group>
    <group android:checkableBehavior="single" android:id="@+id/Services1">
        <item
            android:id="@+id/nav_gallery"

            android:title="Services" />
        </group>
    <group android:checkableBehavior="single" android:id="@+id/consultation1">

        <item
            android:id="@+id/nav_slideshow"

            android:title="Consultation" />
        </group>
    <group android:checkableBehavior="single" android:id="@+id/gallery1">
        <item
            android:id="@+id/nav_manage"

            android:title="Gallery" />

        </group>
        <group android:checkableBehavior="single" android:id="@+id/appoinment1">
        <item
            android:id="@+id/nav_manage1"

            android:title="Appoinment" />
        </group>
    <group android:checkableBehavior="single" android:id="@+id/Contact_Us1">
        <item
            android:id="@+id/Contact_Us"

            android:title="Contact Us" />
    </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>

我的图片是...... Want to remove the padding showing in blue mark

4 个答案:

答案 0 :(得分:27)

根据NavigationView找到here的源代码,它引导我到NavigationMenuPresenter(找到here),它说菜单列表中的每个普通类型都会膨胀R.layout.design_navigation_item。因此,如果您预览它(here),您会注意到它使用的偏好。

<android.support.design.internal.NavigationMenuItemView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="?attr/listPreferredItemHeightSmall"
        android:paddingLeft="?attr/listPreferredItemPaddingLeft"
        android:paddingRight="?attr/listPreferredItemPaddingRight"
        android:foreground="?attr/selectableItemBackground"
android:focusable="true"/>

因此,最后一步是覆盖样式属性,即引用layout_height的{​​{1}}。

打开你的styles.xml并使用自定义值覆盖它:

"?attr/listPreferredItemHeightSmall" (default 48dp)

<强>原始

enter image description here

自定义

enter image description here

答案 1 :(得分:8)

将此行添加到您的dimens.xml文件并根据您的需要自定义此DP我已通过这一行解决了我的问题。

<dimen name="design_navigation_padding_top_default" tools:override="true">5dp</dimen>
<dimen name="design_navigation_separator_vertical_padding" tools:override="true">0dp</dimen>
<dimen name="design_navigation_padding_bottom" tools:override="true">5dp</dimen>
<dimen name="design_navigation_icon_size" tools:override="true">20dp</dimen>
<dimen name="design_navigation_icon_padding" tools:override="true">12dp</dimen>

答案 2 :(得分:2)

是的,只需在dimens.xml文件中添加此参数

即可
<dimen name="design_navigation_separator_vertical_padding" tools:override="true">0dp</dimen>

您可以更改的其他可能值是https://github.com/android/platform_frameworks_support/blob/master/design/res/values/dimens.xml


如果你想完全自定义,那么你只需要在导航抽屉里面添加你自己的列表视图,就像这样..

<?xml version="1.0" encoding="utf-8"?>
<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/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:openDrawer="start">

    <include
        layout="@layout/app_bar_dashboard"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <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="true"
        >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <include layout="@layout/nav_header_dashboard"
                android:id="@+id/header"/>

            <ListView
                android:id="@+id/lst_menu_items"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@color/white"
                android:divider="@color/navigation_divider"
                android:dividerHeight="1dp"
                android:layout_marginTop="@dimen/padding10"/>
        </LinearLayout>
    </android.support.design.widget.NavigationView>

</android.support.v4.widget.DrawerLayout>

然后将自己的自定义填充提供给listview行

答案 3 :(得分:1)

您可以将所有商品放在一个组中,然后就不需要删除填充

<group android:checkableBehavior="single">
    <item
        android:id="@+id/nav_camera"
        android:icon="@drawable/ic_menu_camera"
        android:title="Home" />
    <item
        android:id="@+id/nav_gallery"
        android:icon="@drawable/ic_menu_gallery"
        android:title="Camera" />
    <item ...
    ...>
</group>

enter image description here