Селектор Android ImageView не работает

Это мой селектор:

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

    <item android:drawable="@drawable/white_small_down_arrow_v4"   android:state_pressed="true"/>  
    <item android:drawable="@drawable/white_small_up_arrow_v4" android:state_focused="false"/> 
    <item android:drawable="@drawable/white_small_up_arrow_v4" /> <!-- default -->

</selector>

Вот как я применил его к ImageView:

     <ImageView
            android:id="@+id/change_city_small_down_ImageView"
            android:clickable="true"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_toRightOf="@+id/changeCityRelativeLayout"
            android:layout_marginLeft="5dp"
            android:background="@drawable/change_city_selector"
   </ImageView>

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

Я отслеживал состояния изображения при нажатии.

v.hasFocus(): false, v.isClickable(): true, v.isInTouchMode(): true, v.isEnabled(): true, v.isPressed(): true


Я совершил ужасную ошибку, white_small_down_arrow_v4 и white_small_up_arrow_v4 на самом деле указывают в одном направлении, другими словами, это одна и та же картинка.

так что, возможно, моя ошибка поможет кому-то еще, если они обнаружат, что селектор не работает, и первое, что нужно сделать, это проверить, совпадают ли рисунки состояния....


person Qin    schedule 04.04.2014    source источник
comment
это макет, к которому прикреплено изображение: гравитация=center_vertical ‹RelativeLayout/›   -  person Qin    schedule 04.04.2014
comment
Попробуйте android:src=@drawable/change_city_selector вместо android:background=@drawable/change_city_selector @Qin   -  person TheFlash    schedule 04.04.2014
comment
@Indiandroid не работает, и я отчаянно пробовал разные комбинации состояний   -  person Qin    schedule 04.04.2014


Ответы (5)


Попробуйте следующее: используйте изображение android:src="@drawable/change_city_selector" вместо android:background="@drawable/change_city_selector"

<ImageView
        android:id="@+id/change_city_small_down_ImageView"
        android:clickable="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_toRightOf="@+id/changeCityRelativeLayout"
        android:layout_marginLeft="5dp"
        android:src="@drawable/change_city_selector"
</ImageView>
person adnanyousafch    schedule 04.04.2014
comment
Вы имели в виду: android:state_active=true, потому что я не могу найти свойство state_activated. Я скопировал ваше предложение, изображение не меняется - person Qin; 04.04.2014
comment
Вы изменили android:background=@drawable/change_city_selector на android:src=@drawable/change_city_selector в ImageView? - person adnanyousafch; 04.04.2014

Попробуйте добавить android:focusable="true" и android:focusableintouchmode="true" в свойство ImageView.

person markas    schedule 04.04.2014
comment
Я пробовал добавить focusable и focusableintouchmode = true, но не работает. и добавляю onClick = true. не работа. в любом случае, спасибо - person Qin; 04.04.2014

Вам нужно установить clickable на true в ImageView

android:clickable="true"  
person Maher Abuthraa    schedule 17.08.2015

измените свой выбор на это:

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

оба должны быть правдой

person Ashkan    schedule 08.02.2015

Попробуйте это, проверено на Android 4.4.2 и 5.1:

/рисуемый

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

/макет

<ImageView
    android:id="@+id/ivOpenFile"
    android:layout_width="48dp"
    android:layout_height="48dp"
    android:layout_margin="8dp"
    android:layout_alignParentRight="true"
    android:padding="4dp"
    android:background="@drawable/selector_settings_item"
    android:clickable="true"
    android:focusableInTouchMode="true"
    android:visibility="invisible"
    />

/Java

ivOpenFile = (ImageView) rootView.findViewById(R.id.ivOpenFile);
ivOpenFile.setImageDrawable(VectorDrawableCompat.create(
        getResources(),
        R.drawable.vd_action_files_black,
        null));
person elron smith    schedule 07.09.2016