Android 导航抽屉垂直边框

Android Navigation Drawer vertical border

我想让我的 NavigationDrawer 和这个应用程序一样

更具体地说,我想在右侧添加 1 像素的小边框

但这是我从抽屉里得到的东西

这是抽屉片段xml

<ListView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#E7E7E7"
android:choiceMode="singleChoice"
android:dividerHeight="0.5dp" />

我需要做什么?

试试这个,

DrawerLayout mDrawerLayout;

onCreate(Bundle ...){
    //...
    mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow,
                    GravityCompat.START);
    //...
}

编辑

您需要添加一个 ViewListView,并用一个 LinearLayout 水平包裹两者,并给两者一些 权重 。这里我给listView赋予了0.99的权重,给view赋予了0.01的权重,大家可以根据自己的需要修改。

<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

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

        <ListView android:id="@+id/drawer_list"
            android:layout_weight="0.99"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#E7E7E7"
            android:choiceMode="singleChoice"
            android:dividerHeight="0.5dp" />

        <View
            android:layout_weight="0.01"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:background="#eeccbb"/>
    </LinearLayout>

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

预计到达时间:Apurva 的解决方案看起来干净多了。

我不太熟悉导航抽屉,但您可以通过在 ListView 之后向 DrawerLayout 添加视图来创建垂直分隔线。

<View
        android:layout_height="fill_parent"
        android:layout_width="2dip"
        android:background="@android:color/some_color" />

您必须将背景设置为带有右边框的自定义可绘制对象,如下所示:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:top="-5dp" android:bottom="-5dp" android:left="-5dp">
        <shape>
            <solid android:color="@android:color/transparent" />
            <stroke android:width="4dp" android:color="#000000" /> <!--BORDER COLOR-->
        </shape>
    </item>

    <item android:right="5dp">
        <shape android:shape="rectangle">
            <solid android:color="#E7E7E7" />
        </shape>
    </item>
</layer-list>

我为边框使用了随机 dp,我将其设置为 5dp,边框颜色为黑色,将它们更改为您需要的颜色!

I want someone who knows what he is doing, not just copying random answers from internet

好吧,你不会比九路做得更好:

上面的 9 补丁有一个 0.5dp (base xhdpi) 黄色 边框用于说明目的。顶部和左侧守卫(黑线)定义了可拉伸区域。

请注意,右侧的防护线首尾相连。这意味着顶部和底部不会有任何填充。但是,底部的保护线从最左边的像素开始,在黄色边框之前结束。当你把这个9patch设置到listview时,底部的guard line会保证0.5dp(黄色边框的宽度)padding到右边。

虽然这种方法确实需要一些工作。您将需要创建与存储桶一样多的 9patch 可绘制对象。如果你需要0.5dp的边框,每个桶的黄色边框宽度会有所不同:

xxxhdpi:   2 px
xxhdpi:  1.5 px
xhdpi:     1 px
hdpi:   0.75 px
.... and so on

有关 9patch 可绘制对象的更多信息:Link

另一种方法(此处已建议)是使用 View 作为边框。在这种情况下,最简单的安排(此处未提及)是使用 FrameLayout 并将 ListView 和边框放在其中:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <!-- marginRight set to 0.5dp -->
    <ListView 
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginRight="0.5dp"
        android:background="#E7E7E7"
        android:choiceMode="singleChoice"
        android:dividerHeight="0.5dp" />

    <!-- gravity set to right & background set to border color -->
    <View
        android:layout_width="0.5dp"
        android:layout_height="match_parent"
        android:layout_gravity="right"
        android:background="@color/some_color"/>

</FrameLayout>

在这种情况下,您最终将拥有一个 ViewGroup 和一个 View 作为装饰。 9patch 将是最佳解决方案。任你选。

试试这个

<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

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

        <ListView android:id="@+id/drawer_list"
            android:layout_weight="0.99"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#E7E7E7"
            android:choiceMode="singleChoice"
            android:dividerHeight="0.5dp" />

        <View
            android:layout_weight="0.01"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:background="#eeccbb"/>
    </LinearLayout>

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

video on youtube 试试这个设计 Material githuplink

你可以在 10 秒内完成。 使用 xml 中的图层列表并将其设置为 列表视图的背景 并将 1dp 的 padding 权赋予 Listview

将颜色 #ff0000(red) 替换为您的垂直边框颜色 和 #00c0c0 与您的列表视图颜色 . 不要忘记在 listview

中给右填充 1dp

图层列表xml

<?xml version="1.0" encoding="utf-8"?>

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item >

    <shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

    <solid android:color="#ff0000"/>


</shape>

</item>

<item 
    android:right="1dp" >

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

   <solid android:color="#00c0c0"/>




</shape>

</item>

</layer-list>

setDrawerShadow() method is used to set any custom drawable/resource as Navigation Drawer left/right border.

您可以查看:Navigation Drawer -> setDrawerShadow() API usage info

你需要做两件事:

(1) 在 res 中定义你想要的颜色 -> colors.xml as drawable element

<drawable name="drawer_shadow">FFE7E7E7</drawable>

(2) 通过将此元素指定为抽屉阴影可绘制对象,在 MainActivity.java 中使用该元素:

activity_main.xml

<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

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

MainActivity.java

onCreate(Bundle mSavedBundle) {
    mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow,
                GravityCompat.START);
} 

这会将颜色 "FFE7E7E7" 添加为导航抽屉 left/right 边缘

的可绘制对象