Пользовательский стиль 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