Пользовательский Spinner с закругленными углами, штрихованным краем и значком селектора - PullRequest
9 голосов
/ 24 января 2012

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

  1. Если я установлю фон для рисованного ресурса xml, я смогу сделать свой Spinner идеальным, но тогда мне нужнокаким-то образом добавить белый треугольник справа, что я не знаю, как это сделать:

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape>
            <gradient
                android:startColor="#343434"
                android:endColor="#171717"
                android:angle="270" />
            <stroke
                android:width="1dp"
                android:color="#ffffff" />
            <corners
                android:radius="4dp" />
            <padding
                android:left="3dp"
                android:top="3dp"
                android:right="3dp"
                android:bottom="3dp" />
        </shape>
    </item>
    </selector>
    
  2. Я создаю изображение с 9 патчами, которое включает в себя треугольник, а затем использую xmlзакруглить углы и добавить штрих к изображению.Я попробовал это, но не смог заставить его работать:

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:drawable="@drawable/spinnerblack" >
            <stroke
                android:width="1dp"
                android:color="#ffffff" />
            <corners
                android:radius="3dp" />
            <padding
                android:left="3dp"
                android:top="3dp"
                android:right="3dp"
                android:bottom="3dp" />
        </item>
    </selector>
    

Может кто-нибудь сказать мне, что я могу сделать для метода 1 или что я сделал неправильно в методе2?Я бы предпочел не добавлять штрих и закругленные углы в мое изображение из 9 патчей, потому что я не думаю, что оно когда-либо выглядит так хорошо.Кроме того, я бы предпочел метод 1 метод 2. Любая помощь очень ценится.

1 Ответ

12 голосов
/ 24 января 2012

Я сделал что-то похожее на метод 1 в моем приложении. В основном вам нужно объединить ваш селектор со списком слоев:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <layer-list>
            <item>
                <shape>
                    <gradient
                        android:startColor="#343434"
                        android:endColor="#171717"
                        android:angle="270" />
                    <stroke
                        android:width="1dp"
                        android:color="#ffffff" />
                    <corners
                        android:radius="4dp" />
                    <padding
                        android:left="3dp"
                        android:top="3dp"
                        android:right="3dp"
                        android:bottom="3dp" />
                </shape>
            </item>
            <item
                android:top="12dp"
                android:right="15dp">
                <bitmap android:src="@drawable/arrow_bitmap"
                        android:gravity="top|right" />
            </item>
        </layer-list>
    </item>
</selector>

В моем xml я также добавил третий слой, содержащий <shape>, который невидим (то есть его альфа установлен на 0), но добавляет отступы.

...