Форма, выделенная в качестве фона, строка внизу
Я использую 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>
Но этот метод рисует цветной прямоугольник над черным прямоугольником. Я хотел бы иметь только строку внизу формы без черного прямоугольника, потому что черный не прозрачен. Как я могу это достичь?
Ответы
Ответ 1
В общем, я стараюсь как можно меньше вмешиваться в фоны, если это абсолютно необходимо, так как это перекрывает цвета фона по умолчанию, которые имеют состояния для сфокусированных, нажатых и т.д. Я предлагаю просто использовать дополнительный вид (в вертикальном LinearLayout), который такой же толстый, как вам нужно. Например:
<View
android:background="#FF000000"
android:layout_height="2dp"
android:layout_width="fill_parent"/>
Ответ 2
Вот так у меня появилась строка внизу для моей. Нарисуйте обводку, но затем сдвиньте элемент вверх и в стороны, чтобы получить верх и стороны, чтобы не отображать обводку:
<?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>
Ответ 3
Я думаю, что это лучшее решение:
<?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>
Ответ 4
Обычно для подобных задач - я создал список слоев, как этот:
<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 был прозрачным, я не мог использовать вышеприведенное. Я нашел еще одно решение
<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)
Ответ 5
С этим решением, где вам когда-либо потребуется другая линия, вы можете. Мое требование было только подчеркнуть. Даже вы можете дать разные цвета для макета. На картинке ниже вы видите белую линию ![enter image description here]()
<?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>
Ответ 6
Простое решение - расширить 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);
}