Подтвердить что ты не робот

Форма, выделенная в качестве фона, строка внизу

Я использую 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>

Но этот метод рисует цветной прямоугольник над черным прямоугольником. Я хотел бы иметь только строку внизу формы без черного прямоугольника, потому что черный не прозрачен. Как я могу это достичь?

4b9b3361

Ответ 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);
}