Персонализираният стил на Android ToggleButton не се прилага

Следвах този пример за прилагане на някои персонализирани теми към моите бутони за превключване, но когато стартирам приложението си, виждам общите икони за превключване на android - мисля, че пропускам настройка тук или там и бих могъл да използвам допълнителен набор от очи върху нея.

Имам оформление за използване в ListView, за което се опитвам да използвам персонализирани чертежи за проверено/неотметнато състояние, като всеки статус на превключване е зададен на ПРОВЕРЕН по подразбиране:

<ToggleButton
        android:id="@+id/profile_item_value_text"
        style="@style/ProfileTagTheme"
        android:layout_width="0px"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:textSize="16dp"
        android:textColor="@color/black"
        android:layout_gravity="center"
        android:gravity="center_vertical|center_horizontal"
        android:checked="true" />

Ето какво имам в моя styles файл за ProfileTagTheme:

<style name="Widget.Button.Toggle" parent="android:Widget">
    <item name="android:background">@drawable/profile_btn_toggle_bg</item>
    <item name="android:disabledAlpha">@android:attr/disabledAlpha</item>
</style>
<style name="ProfileTagTheme" parent="android:Theme.Black">
    <item name="android:buttonStyleToggle">@style/Widget.Button.Toggle</item>
</style>

И на свой ред, profile_btn_toggle_bg.xml, живеещ в моята основна drawable директория:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@android:id/background" android:drawable="@android:color/transparent"/>
    <item android:id="@android:id/toggle" android:drawable="@drawable/profile_btn_toggle"/>
</layer-list>

което препраща към profile_btn_toggle, точно до него:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true" android:drawable="@drawable/tag_active" /> <!-- pressed -->
    <item android:drawable="@drawable/tag" /> <!-- default/unchecked -->
</selector>

Проверих, че персонализираните изображения присъстват в директорията на drawables, така че очевидно или не разбирам нещо погрешно относно начина, по който стиловете се каскадират, или пропускам препратка някъде в тази стилова лудост.


person Bry M.    schedule 06.02.2013    source източник


Отговори (2)


Така че изглежда единственият истински проблем, който имах, беше липсата на елемента android:background в моята реализация ToggleButton; така че единствената промяна в кода по-горе беше добавянето на този елемент, напр.

<ToggleButton
        android:id="@+id/profile_item_value_text"
        style="@style/ProfileTagTheme"
        android:background="@drawable/profile_btn_toggle_bg"
        android:layout_width="0px"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:textSize="16dp"
        android:textColor="@color/black"
        android:layout_gravity="center"
        android:gravity="center_vertical|center_horizontal"
        android:checked="true"
        android:onClick="onToggleClicked" />
person Bry M.    schedule 06.02.2013

Правя нещо подобно в няколко от моите приложения. имайте предвид, че това е напълно различен подход към стиловете и може/може да не работи за вашата ситуация. Като задам фона, мога да задам изображението, което искам за моя бутон за превключване:

<ToggleButton
    android:id="@+id/tb_useNotificationShortcuts"
    android:layout_width="100dp"
    android:layout_height="25dp"
    android:layout_gravity="center"
    android:background="@drawable/togglebutton"
    android:tag="21" />


<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

   <item android:drawable="@drawable/custom_toggle_on" android:state_checked="true"/>
   <!-- pressed -->
   <item android:drawable="@drawable/custom_toggle_off"/>
   <!-- default/unchecked -->

</selector>

custom_toggle_on и custom_toggle_off са моите изображения, това може да са и вашите списъци със слоеве.

person Matthew    schedule 06.02.2013