3

这是我的选择器:

<?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 时,相应的状态可绘制图像不会改变。我已经在其他 wigdet 上尝试过,也不起作用。我不知道为什么,因为我曾经这样做过,而且它有效。

当它被点击时,我已经监控了 imageview 的状态。

v.hasFocus():假,v.isClickable():真,v.isInTouchMode():真,v.isEnabled():真,v.isPressed():真


我犯了一个可怕的错误,white_small_down_arrow_v4 和 white_small_up_arrow_v4 实际上指向同一个方向,换句话说,它们是同一张图片。

所以,如果他们发现选择器不起作用,可能我的错误会对其他人有所帮助,首先要做的是检查状态可绘制对象是否相同......

4

5 回答 5

2

试试这个:使用图像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>
于 2014-04-04T04:01:09.397 回答
1

尝试在 ImageView 属性中添加android:focusable="true"和。android:focusableintouchmode="true"

于 2014-04-04T03:45:28.293 回答
1

您需要在 ImageView 中将 clickable 设置为 true

android:clickable="true"  
于 2015-08-17T00:26:36.073 回答
0

将您的选择更改为:

<?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>

他们都应该是真的

于 2015-02-08T06:10:35.600 回答
0

试试这个,它在 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));
于 2016-09-07T14:11:41.947 回答