Как создать виджет Widget.Holo.Spinner в v7

У меня есть Button, который я хочу стилизовать, например, в качестве стирателя в стиле Holo, т.е. подчеркивается треугольником в нижнем правом углу - например, приложение для встроенных контактов.

enter image description here

Самый простой способ - создать кнопку и стилизовать ее как style="@android:style/Widget.Holo.Spinner" -, которая дает мне визуальный результат, который я хочу.

Однако мое приложение предназначено для поддержки Android 2.x, поэтому я не могу использовать родные стили Holo. В AppCompat есть несколько стилей, связанных с spinner, таких как @style/Widget.AppCompat.Spinner и другие, но они не выглядят одинаково: они просто создают небольшой треугольник в центре на правом краю виджета и не подчеркивают.

Я мог бы подделать его, создав свой собственный фон с 9 патчами, но я не могу себе представить, что этот стиль Spo Holo отсутствует в V7 AppCompat. Есть ли стиль, который я могу использовать, или каким-либо другим способом создать визуальный результат, который я хочу, не создавая свой собственный ресурс?

Ответ 1

Пользователь "ozi" получил меня там, к сожалению, его ответ был удален, потому что это была просто ссылка.

Трюк заключается в использовании настраиваемого атрибута и переопределении его с помощью раздела, посвященного v11. Вот базовая настройка, если вы используете темы:

В значениях /attr.xml:

<declare-styleable name="MyApp">
    <attr name="holoSpinnerStyle" format="reference" />
</declare-styleable>

Вы создаете свою Spinner-Button следующим образом:

<Button
    style="?attr/holoSpinnerStyle"
     />

И вот ключ: у вас разные значения в теме в зависимости от того, есть ли у вас v11:

В значениях /themes.xml:

<style name="MyTheme">
    <item name="holoSpinnerStyle">@style/Widget.AppCompat.Spinner</item>
</style>

В значениях-v11/themes.xml:

<style name="MyTheme">
    <item name="holoSpinnerStyle">@android:style/Widget.Holo.Light.Spinner</item>
</style>

Если вы не используете темы, ваша настройка почти идентична - вы просто используете styles.xml, создаете определенный стиль для своей кнопки и используете это.

В pre-v11 это создаст спиннер старого стиля, но это действительно хорошо - vinner vinner выглядел бы неуместно в среде pre-v11.

Ответ 2

Я бы не рекомендовал вам стилизовать кнопку, подобную прядильщику. Android создали особый стиль для button по какой-то причине. Причина этого проста; вы будете путать пользователей вашего приложения, если вы наберете кнопку, подобную прядильщику, и они подумают, что кнопка - это прядильщик. Вот почему команда разработчиков Android не рекомендует это.

Тем не менее, если вы все еще хотите отобразить кнопку в качестве змея, вы всегда можете скопировать дизайн счетчика, сохранить его как изображение и установить его в качестве фона кнопки yuor через этот xml:

android:background="@drawable/spinner"

Выбираемый spinner должен быть сохранен в папке drawables как изображение.