Android导航抽屉垂直边框

时间:2015-03-04 21:00:38

标签: android android-layout navigation-drawer

我想让我的NavigationDrawer就像在这个应用程序中一样

enter image description here

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

enter image description here

但这是我抽屉里的东西 enter image description here

这是抽屉片段的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" />

我该怎么做?

7 个答案:

答案 0 :(得分:4)

试试这个,

DrawerLayout mDrawerLayout;

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

修改

您需要添加一个ViewListView,并将两个LinearLayout水平包装并同时包含一些重量。在这里,我将0.99权重listView0.01权重赋予view,您可以根据自己的要求进行更改。

<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>

答案 1 :(得分:2)

enter image description here

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

用您的垂直边框颜色替换颜色#ff0000(红色) #00c0c0和你的listview颜色 。 别忘了在listview中给出1dp的正确填充

Layerlist 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>

答案 2 :(得分:1)

  

我想要有人知道他在做什么,而不仅仅是随意复制   来自互联网的答案

嗯,你不会做比九条路更好的事情:

enter image description here

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

请注意,右侧的保护线完整,端到端。这意味着顶部和底部不会有任何填充。但是,底部的防护线从最左边的px开始,并在黄色边框之前完成。当您将此9patch设置为列表视图时,底部保护线将确保向右填充0.5dp(黄色边框的宽度)。

这种方法确实需要一些工作。您需要创建与存储桶一样多的9patch drawable。如果您需要0.5dp边框,则每个存储桶的黄色边框宽度将不同:

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

有关9patch drawables的更多信息: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&amp;在这种情况下,视图作为装饰。 9patch将是最佳解决方案。随便挑选。

答案 3 :(得分:0)

ETA:Apurva的解决方案看起来更清洁。

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

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

答案 4 :(得分:0)

您必须将背景设置为具有右边框的自定义drawable,如下所示:

<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,边框颜色为黑色,将其更改为您需要的颜色!

答案 5 :(得分:0)

试试这个

<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  尝试这个设计材料githup link

答案 6 :(得分:0)

  

setDrawerShadow()方法用于设置任何自定义drawable / resource   作为导航抽屉左/右边框。

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

你需要做两件事:

(1)在res中定义你想要的颜色 - &gt; colors.xml作为可绘制元素

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

(2)在MainActivity.java中使用此元素,将其指定为抽屉阴影drawable:

<强> 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”