Форма рисуется в качестве фона, линия внизу - PullRequest
51 голосов
/ 29 марта 2012

Я использую drawable в качестве фона TextView, чтобы разделительная линия была ниже текста. A достиг этого с помощью 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>

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

Ответы [ 5 ]

185 голосов
/ 03 января 2014

Вот так у меня есть линия внизу для моей. Нарисуйте обводку, но затем сдвиньте элемент вверх и в стороны, чтобы получить верх и стороны, чтобы не отображать обводку:

<?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>
31 голосов
/ 30 марта 2012

В общем, я стараюсь как можно меньше связываться с фоном, если в этом нет крайней необходимости, так как это переопределяет цвета фона по умолчанию, которые имеют состояния для фокусировки, нажатия и т. Д. Я предлагаю просто использовать дополнительный вид (в вертикальном LinearLayout ) это настолько густо, насколько вам нужно. Например:

 <View 
       android:background="#FF000000" 
       android:layout_height="2dp" 
       android:layout_width="fill_parent"/>
26 голосов
/ 28 апреля 2017

Я думаю, что это лучшее решение:

<?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>
6 голосов
/ 19 июля 2017

Обычно для подобных задач - я создал список слоев, который можно нарисовать так:

<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 - это простой прямоугольник, который можно нарисовать белым цветом)

3 голосов
/ 28 июня 2017

С этим решением, где вам когда-либо потребуется другая линия, вы можете. Мое требование было только подчеркнуть. Даже вы можете дать разные цвета для макета. Вы можете увидеть на рисунке ниже, белая линия 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>
...