2013-03-31 3 views
3

Я хотел бы изменить фон для кнопки изображения. В основном изображение, которое я смотрю отлично на прозрачном фоне и немного паршиво, когда есть куча всех их с непрозрачным фоном.Измените только одно состояние (состояние по умолчанию) фона ImageButton

Это должно быть легко - просто изменить android:background на кнопку прозрачного цвета (через растяжимой): click_background.xml

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

    <item android:state_focused="true"><color android:color="#FF008080" /> 
    </item> 
    <item android:state_pressed="true"><color android:color="#FF008080" /> 
    </item> 
    <item><color android:color="#00000000" /> 
    </item> 

</selector> 

Тогда кнопка

<ImageButton 
       android:id="@+id/players" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:layout_gravity="center" 
       android:background="@drawable/click_background" 
       android:contentDescription="@string/players" 
       android:src="@drawable/speaker_tile" /> 

Проблема - это то, что я действительно хочу сохранить state_focussed и state_pressed версии фона (которые, как я полагаю, получены из темы). Я хотел бы, чтобы фон появлялся, когда кнопка нажата или выбрана (и отображается с тем же цветом/рисунком), которая будет использоваться темой, обычно при нажатии кнопки, будет полезна.

мне было интересно, если есть способ сделать одно из следующих действий, но до сих пор не удалось найти что-либо либо:

  1. Определить селектор, который в некоторых, что наследуется от другого (аналогично к способу, которым тема может наследовать от другого).

  2. Создайте совершенно новый селектор, но у него есть ссылка на XML: цвет/выталкиваемый текст state_focussed и state_pressed, используемый для кнопки изображения. Редактировать: похоже, этот параметр отсутствует. Я бы нуждался в атрибутах, но вы не можете ссылаться на них из доступных. See here

Я хотел бы сделать это в декларативных XML, а не Программной Java, если это возможно.

ответ

3

Вы можете скопировать чертежи, используемые операционной системой Android, в свой проект и использовать их в своем списке. Вы можете найти изображения в {android-sdk-directory}/platforms/android-##/data/res/drawable[-*dpi]

EDIT: Если вы идете в {android-sdk-directory}/platforms/android-##/data/res/values, вы найдете themes.xml и styles.xml файлы, используемые Android. Используя их, вы можете определить, какие чертежи вы будете искать.

Например, тема по умолчанию для более новых версий Android - Theme.Holo. Эта тема имеет стиль по умолчанию для ImageButtons заявленных как так:

<item name="imageButtonStyle">@android:style/Widget.Holo.ImageButton</item>

В styles.xml, этот стиль определяется следующим образом:

<style name="Widget.Holo.ImageButton" parent="Widget.ImageButton"> 
    <item name="android:background">@android:drawable/btn_default_holo_dark</item> 
</style> 

К счастью атрибут фона прямо определено в виду. Иногда это унаследовано от родительского стиля, и вы должны найти это вместо этого.В любом случае, вот вытяжка (находится в /drawable каталоге, так как это XML):

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_window_focused="false" android:state_enabled="true" 
    android:drawable="@drawable/btn_default_normal_holo_dark" /> 
<item android:state_window_focused="false" android:state_enabled="false" 
    android:drawable="@drawable/btn_default_disabled_holo_dark" /> 
<item android:state_pressed="true" 
    android:drawable="@drawable/btn_default_pressed_holo_dark" /> 
<item android:state_focused="true" android:state_enabled="true" 
    android:drawable="@drawable/btn_default_focused_holo_dark" /> 
<item android:state_enabled="true" 
    android:drawable="@drawable/btn_default_normal_holo_dark" /> 
<item android:state_focused="true" 
    android:drawable="@drawable/btn_default_disabled_focused_holo_dark" /> 
<item 
    android:drawable="@drawable/btn_default_disabled_holo_dark" /> 
</selector> 

Итак, это вводимый коэффициент Android использует для фона стандартного ImageButton в (Хол темно) тему по умолчанию.

+0

Спасибо, Любые подсказки, на которые элемент в каталоге, который я буду искать? Довольно много искать. –

+0

Я думаю, что ImageButton использует тот же фон, что и обычная кнопка. Это также зависит от уровня платформы. В более новых версиях Android я думаю, что btn_default_ {state} _holo_dark.9.png и btn_default_ {state} _holo_light.9.png - это те, которые вы ищете, но я не уверен. Обычно мне приходится просматривать res/values ​​/ themes.xml и res/values ​​/ styles.xml в ресурсах платформы, чтобы выяснить, что именно я ищу – Karakuri

+0

Кроме того, почему мой ответ был downvoted? – Karakuri

Смежные вопросы