Selector.xml не работает при нажатии на кнопку изображения - PullRequest
3 голосов
/ 25 октября 2011

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

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

    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <!-- Button Pressed -->
        <item android:state_focused="true" android:state_pressed="true" 
    android:drawable="@drawable/mapiconover"/>
</selector>

И в кнопке

Я делаю так,

  <ImageButton 
    android:layout_width="wrap_content" android:layout_height="wrap_content"
    android:id="@+id/btnMap" android:layout_centerInParent="true"  android:src="@drawable/mapselector"
    android:background="@drawable/map" android:scaleType="fitXY"
    android:layout_alignParentBottom="true">
</ImageButton>

, но изображение не меняется, когдаЯ нажимаю.

Есть предположения?

Ответы [ 3 ]

9 голосов
/ 25 октября 2011

вы создадите это в ImageButton xml

создайте файл XML, используя изображение кнопки, подобное этому

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
 <item 
    android:state_pressed="true" 
    android:drawable="@drawable/backbutton" />
  <item 
   android:drawable="@drawable/closebutton" />
</selector>   

добавьте этот файл XML в качестве фона для IMageButton

<ImageButton                 
    android:layout_height="50px" 
    android:layout_width="50px" 
    android:id="@+id/settings" 
    android:background="@drawable/settings_button" //setting_button in
                                                         the xml file            
    android:text="Settings"/>
0 голосов
/ 26 января 2019

У меня была такая же проблема.Для меня это было из-за конфликта

android: state_xxxx

.Это решается путем выяснения условий между включенным и нажатием.Я использовал следующий код для получения разных состояний между нажатием и нормальным состоянием:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="true" android:state_pressed="false" >
        <shape
            android:shape="rectangle">
            <gradient android:startColor="#1094ff"
                android:endColor="#7eb6e3"
                android:angle="270" />
            <corners android:radius="@dimen/fab_margin" />
            <stroke android:width="2px"
                android:color="#505050" />
        </shape>
    </item>
    <item android:state_pressed="true" android:state_enabled="true">
        <shape
            android:shape="rectangle">
            <gradient android:startColor="#0075d4"
                android:endColor="#0070cb"
                android:angle="270" />
            <corners android:radius="@dimen/fab_margin" />
            <stroke android:width="2px"
                android:color="#ff0000" />
        </shape>
    </item>
    <item android:state_enabled="false" >
        <shape
            android:shape="rectangle">
            <gradient android:startColor="#b9b9b9"
                android:endColor="#848484"
                android:angle="270" />
            <corners android:radius="@dimen/fab_margin" />
            <stroke android:width="2px"
                android:color="#505050" />
        </shape>
    </item>
</selector>

В этом примере используются разные градиент и ход для разных состояний.Вы также можете использовать свой Drawable вместо.Просто создайте файл вроде «mybutton.xml» в вашей папке для рисования.затем установите свойство background вашей кнопки следующим образом:

android: background = "@ drawable / mybutton"

Надеюсь, это будет полезно.

0 голосов
/ 25 октября 2011

Не уверен, что это будет работать, но вы можете попробовать изменить свой селектор на это:

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

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- Button Pressed -->
    <item android:state_focused="true" android:state_pressed="true" 
     android:drawable="@drawable/mapiconover"/>
    <item android:drawable="@drawable/map" />

</selector>

и кнопку вашего изображения на это:

  <ImageButton 
    android:layout_width="wrap_content" android:layout_height="wrap_content"
    android:id="@+id/btnMap" 
    android:layout_centerInParent="true"  
     android:background="@drawable/mapselector"
     android:scaleType="fitXY"
    android:layout_alignParentBottom="true">
</ImageButton>
...