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);
//...
}
编辑
您需要添加一个 View
和 ListView
,并用一个 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 边缘
的可绘制对象
我想让我的 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);
//...
}
编辑
您需要添加一个 View
和 ListView
,并用一个 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 边缘
的可绘制对象