2015-02-04 1 views
0

Я хочу изменить цвет фона ImageButton, когда я нажимаю на него. Так что я создаю селектор ...Селектор не работает на ImageButton - Android

button_click.xml

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

    <item android:drawable="@drawable/button_normal" /> 
    <item android:drawable="@drawable/button_pressed" android:state_pressed="true" /> 

</selector> 

Для этого селектора я создаю два вводимые коэффициент: button_normal.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
     <shape> 
      <solid android:color="@color/white_transparent" /> 
      <corners android:radius="2dp" /> 
      <stroke android:color="@color/shadow" android:width="1dp" /> 
     </shape> 
    </item> 
</selector> 

и button_pressed.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
     <shape> 
      <solid android:color="#FFCC00" /> 
      <corners android:radius="2dp" /> 
      <stroke android:color="@color/shadow" android:width="1dp" /> 
     </shape> 
    </item> 
</selector> 

Все то же самое, только я меняю цвет. Это мой colors.xml файл:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 

    <color name="white">#FFFFFF</color> 
    <color name="black">#000000</color> 
    <color name="gray">#EEEEEE</color> 

    <color name="primaryColor">#2196F3</color> 
    <color name="primaryColorDark">#1976D2</color> 
    <color name="accentColor">#009688</color> 

    <color name="shadow">#1A000000</color> 
    <color name="text_color">#B6B7B9</color> 
    <color name="button_clicked">#80000000</color> 
    <color name="white_transparent">#BFFFFFFF</color> 

</resources> 

И я использую этот селектор в моем файле main_screen.xml на ImageButton:

<ImageButton 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="@drawable/button_click" 
     android:padding="@dimen/activity_vertical_margin" 
     android:clickable="true" 
     android:id="@+id/btnSinoLoc" 
     android:src="@drawable/find_sino" 
     android:layout_margin="@dimen/activity_horizontal_margin" 
     android:contentDescription="@null" 
     android:maxHeight="40dp" 
     android:maxWidth="40dp" 
     android:adjustViewBounds="true" 
     android:layout_alignTop="@+id/map" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" /> 

Но это не работает ... Я получил ImageButton как я хочу, но когда я нажимаю, цвет не меняется. Так что мне не хватает, или есть другой способ сделать это?

ответ

3

Вы должны также определить элемент для statePressed ложной:

<item android:drawable="@drawable/button_normal" android:state_pressed="false" /> 

и установить СРК Вашего ImageButton:

android:src="@drawable/button_click" 

Вы описали XML-селектор имеет имя button_click.xml, поэтому вы должны вызвать его в атрибуте src. Кроме того, чертежи должны быть реальными чертежами, а не двумя селекторами. Итак, вы можете сделать форму ...

<?xml version="1.0" encoding="UTF-8"?> 
    <shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="rectangle"> 
     <solid android:color="#FFCC00" /> 
     <corners android:radius="2dp" /> 
     <stroke android:color="@color/shadow" android:width="1dp" /> 
    </shape> 
+0

Спасибо, проблема заключалась в создании чертежей в качестве селектора ....: / – KiKo