我使用drawable作为TextView的背景,只是在文本下方有一个分隔线。用这个drawable-xml来解释它:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
<shape
android:shape="rectangle">
<solid android:color="#FFDDDDDD" />
<gradient
android:angle="0"
android:startColor="#FFAAAAAA"
android:endColor="#FFEEEEEE"
/>
</shape>
</item>
<item android:bottom="2dp">
<shape
android:shape="rectangle">
<solid android:color="#FF000000" />
</shape>
</item>
</layer-list>
但是这种方法在黑色矩形上方绘制一个彩色矩形。我想只在形状底部的线条没有黑色矩形,因为黑色不透明。我怎么能做到这一点?
答案 0 :(得分:185)
这就是我在底部获得一条线的方式。绘制一个笔划,然后将项目向上移动到两侧以使顶部和侧面不显示笔划:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:top="-8dp" android:left="-8dp" android:right="-8dp">
<shape>
<solid android:color="#2b7996"/>
<stroke android:color="#33b5e5" android:width="6dp"/>
</shape>
</item>
</layer-list>
答案 1 :(得分:31)
一般情况下,除非绝对必要,否则我会尝试尽可能少地使用背景,因为这样做会覆盖具有聚焦,按下等状态的默认背景颜色。我建议只使用其他视图(在垂直LinearLayout中) )就像你需要它一样厚。例如:
<View
android:background="#FF000000"
android:layout_height="2dp"
android:layout_width="fill_parent"/>
答案 2 :(得分:23)
我认为这是更好的解决方案:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:gravity="bottom">
<shape>
<size android:height="1dp" />
<solid android:color="#000000" />
</shape>
</item>
</layer-list>
答案 3 :(得分:5)
通常对于类似的任务 - 我创建了像这样的图层列表:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<solid android:color="@color/underlineColor"/>
</shape>
</item>
<item android:bottom="3dp">
<shape android:shape="rectangle">
<solid android:color="@color/buttonColor"/>
</shape>
</item>
这个想法是首先用underlineColor绘制矩形然后在这个上面用实际的buttonColor绘制另一个矩形但是应用bottomPadding。它总能奏效。
但是当我需要让buttonColor变得透明时,我无法使用上面的drawable。我找到了另一个解决方案
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<solid android:color="@android:color/transparent"/>
</shape>
</item>
<item android:drawable="@drawable/white_box" android:gravity="bottom" android:height="2dp"/>
</layer-list>
(正如你在这里看到的,mainButtonColor是透明的,而white_box只是一个简单的矩形,可以用白色Solid绘制)
答案 4 :(得分:3)
使用此解决方案,您可以使用不同的线路。我的要求只是强调。即使您可以为布局提供不同的颜色。您可以在下面的图片中看到白线
<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:top="-5dp" android:left="-5dp" android:right="-5dp">
<shape>
<solid android:color="@android:color/transparent"/>
<stroke android:color="@color/white" android:width="5dp"/>
</shape>
</item>
<item android:top="-5dp" android:bottom="-5dp" android:right="-5dp">
<shape>
<solid android:color="@android:color/transparent"/>
<stroke android:color="@color/colorPrimaryDark" android:width="5dp"/>
</shape>
</item>
<item android:bottom="-5dp" android:left="-5dp" android:right="-5dp">
<shape>
<solid android:color="@android:color/transparent"/>
<stroke android:color="@color/colorPrimaryDark" android:width="5dp"/>
</shape>
</item>
<item android:top="-5dp" android:left="-5dp" android:bottom="-5dp">
<shape>
<solid android:color="@android:color/transparent"/>
<stroke android:color="@color/colorPrimaryDark" android:width="5dp"/>
</shape>
</item>
<item android:bottom="2dp" android:left="5dp" android:right="5dp" android:top="5dp">
<shape>
<solid android:color="@color/colorPrimary"/>
<corners android:bottomRightRadius="0dp"
android:bottomLeftRadius="0dp"
android:topLeftRadius="0dp"
android:topRightRadius="0dp" />
</shape>
</item>
</layer-list>
答案 5 :(得分:0)
一个简单的解决方案是扩展TextView,然后覆盖onDraw。
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint paint = new Paint();
paint.setColor(ContextCompat.getColor(getContext(),R.color.colorTextUnderLine));
paint.setStrokeWidth(10);
canvas.drawLine(0.0f,canvas.getHeight(),canvas.getWidth(),canvas.getHeight(),
paint);
}
答案 6 :(得分:0)
这是上述内容的较轻变体。
/drawable/rect_highlight.xml
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<stroke android:width="1px" android:color="@color/colorHighlight"/>
</shape>
/drawable/underline.xml
<inset xmlns:android="http://schemas.android.com/apk/res/android" android:insetLeft="-1px" android:insetRight="-1px" android:insetTop="-1px" android:drawable="@drawable/rect_highlight"/>
用法:
<TextView ... android:background="@drawable/underline"/>
这不是我的,比我想像的人还要聪明。如果我更聪明,我会问谁。 :)