Набор Android ImageButton как переключатель

Как у меня может быть imagebutton, остаются в 'нажатом' состоянии, когда оно нажато? В основном я просто хочу, чтобы фон был подавленным фоном, но я не могу выяснить, как установить его. В данный момент я только что скопировал выбранный фон кнопки в свою res папку, но когда я установил его как фон, это становится расплывчатым (так как исходное изображение больше, чем сама кнопка).

Нормальный Фон: http://img707.imageshack.us/img707/9199/ss20100426163452.png сопроводительного текста, Что я получаю: сопроводительный текст http://img707.imageshack.us/img707/912/ss20100426163357.png сопроводительный текст http://img3.imageshack.us/img3/8304/ss20100426163623.png

Также я не полагаю, что могу на самом деле использовать этот метод, рассматривая много различных разметок UI. Кнопка должна остаться нажатой согласно UI, который использует пользователь.

17
задан Kleptine 1 May 2010 в 18:10
поделиться

1 ответ

Это можно сделать несколькими способами:

Во-первых, вы можете просто использовать ImageButton и вручную переключать его изображение. можно рисовать по щелчку в Java. Это то, что, например, штатный Музыкальный проигрыватель на Android делает для кнопки случайным образом . Хотя у вас не будет контроля над фоном кнопки в установленном состоянии, вы сможете поменять изображение, что может быть благоприятным с точки зрения согласованности пользовательского интерфейса Android.

Другой вариант - использовать сложный набор чертежей и девяти патчей для получения изображения внутри ToggleButton с возможностью изменения фона и / или ресурса изображения при переключении. Этот вариант я покажу ниже. Но помните, прежде чем делать это, будьте осторожны с согласованностью пользовательского интерфейса.


res / layout / foo.xml

...
<ToggleButton
    android:textOn="" android:textOff=""
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/shuffle_button" />
...

res / drawable / shuffle_button.xml

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- use "@android:drawable/btn_default" to keep consistent with system -->
    <item android:drawable="@drawable/toggle_button_background" />
    <item android:drawable="@drawable/shuffle_button_image" />
</layer-list> 

res / drawable / toggle_button_background.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- checked state -->
    <item android:state_pressed="false" android:state_checked="true"
          android:drawable="@drawable/btn_default_checked" />

    <item android:state_window_focused="false" android:state_enabled="true"
          android:drawable="@drawable/btn_default_normal" />
    <item android:state_window_focused="false" android:state_enabled="false"
          android:drawable="@drawable/btn_default_normal_disable" />
    <item android:state_pressed="true"
          android:drawable="@drawable/btn_default_pressed" />
    <item android:state_focused="true" android:state_enabled="true"
          android:drawable="@drawable/btn_default_selected" />
    <item android:state_enabled="true"
          android:drawable="@drawable/btn_default_normal" />
    <item android:state_focused="true"
          android:drawable="@drawable/btn_default_normal_disable_focused" />
    <item android:drawable="@drawable/btn_default_normal_disable" />
</selector>

res / drawable / shuffle_button_image.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/ic_mp_shuffle_on_btn" android:state_checked="true" />
    <item android:drawable="@drawable/ic_mp_shuffle_off_btn" />
</selector>

файлов изображений

ПРЕДУПРЕЖДЕНИЕ : если вы их используете, ваше приложение будет выглядеть несовместимо на устройствах с настраиваемыми пользовательскими интерфейсами ОС (например, HTC Sense UI).

  • ic_mp_shuffle_ _btn.9.png должен состоять из девяти фрагментов, чтобы изображение центрировалось и не растягивалось до размера кнопки.Ниже приведены примеры hdpi версий значка:

res / drawable- (h | m | ldpi) / ic_mp_shuffle_ (on | off) _btn.9.png


Заключительное примечание : Не забывайте по возможности согласовываться с пользовательским интерфейсом системы и помнить о том, что ваше приложение может работать на устройствах с настроенными версиями ОС, которые имеют другую графику для элементов пользовательского интерфейса, таких как кнопки. Примером этого является HTC Sense , у которого зеленые кнопки вместо серых / оранжевых / желтых кнопок в стандартном Android. Итак, если вы в конечном итоге скопируете файлы btn_default _... PNG из репозитория с открытым исходным кодом для создания переключаемого фона кнопки, вы нарушите согласованность на этих устройствах.

40
ответ дан 30 November 2019 в 11:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: