Android Установите ImageButton как Toggle

17

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

Обычный фон: alt text http://img707.imageshack.us/img707/9199/ss20100426163452.png Что я получаю: alt text http://img707.imageshack.us/img707/912/ss20100426163357.png alt text http://img3.imageshack.us/img3/8304/ss20100426163623.png

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

    
задан GuyNoir 26.04.2010 в 22:38
источник

1 ответ

40

Есть несколько способов сделать это:

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

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

Рез / макет / foo.xml

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

Рез / вытяжка / 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> 

Рез / вытяжка / 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>

Рез / вытяжка / 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>

Файлы изображений

  • btn_default_<state>.9.png можно найти в frameworks / base.git в разделе core / res / res / drawable-hdpi и core / res / res / drawable-mdpi (также ldpi). ПРЕДУПРЕЖДЕНИЕ . Если вы их используете, ваше приложение будет выглядеть несовместимо с устройствами с настраиваемыми пользовательскими интерфейсами ОС (то есть с интерфейсом Sense от HTC).
  • ic_mp_shuffle_<state>_btn.9.png должны быть девятью патчами, чтобы изображение центрировалось и не растягивалось, чтобы оно соответствовало кнопке. Ниже приведены примеры hdpi версии значка:

Рез / drawable- (ч | м | ldpi) / ic_mp_shuffle_ (на | выкл) _btn.9.png

ic_mp_shuffle_on_btn.9 .png http://nikonizer.yfrog.com/Himg404/scaled.php?tn=0&server=404&filename=icmpshuffleonbtn9.png&xsize=640&ysize=640 ic_mp_shuffle_off_btn.9.png http: //nikonizer.yfrog. ? ком / Himg708 / scaled.php т = 0 & амп; сервер = 708 & амп; имя файла = icmpshuffleoffbtn9.png & амп; XSIZE = 640 & амп; YSIZE = 640

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

    
ответ дан Roman Nurik 01.05.2010 в 21:36
источник