【问题标题】:Android ImageView selector does not workAndroid ImageView 选择器不起作用
【发布时间】:2016-09-07 22:11:41
【问题描述】:

这是我的选择器:

<?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() : false , v.isClickable() : true , v.isInTouchMode() :true , v.isEnabled() : true , v.isPressed() : true


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

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

【问题讨论】:

  • 这是 imageview 附加的布局:
  • 试试 android:src="@drawable/change_city_selector" 而不是 android:background="@drawable/change_city_selector" @Qin
  • @Indiandroid 不行,拼命尝试各种状态组合

标签: android android-imageview android-selector


【解决方案1】:

试试这个:使用图片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>

【讨论】:

  • 您的意思是:android:state_active="true",因为我找不到 state_activated 属性。我复制了你的建议,imageview 没有改变
  • 你在ImageView中把android:background="@drawable/change_city_selector"改成android:src="@drawable/change_city_selector"了吗?
【解决方案2】:

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

【讨论】:

  • 我尝试添加 focusable 和 focusableintouchmode = "true",但是,不起作用。我添加 onClick = "true"。不行。还是谢谢你
【解决方案3】:

你需要在ImageView中设置clickable为true

android:clickable="true"  

【讨论】:

    【解决方案4】:

    将您的选择更改为:

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

    两者都应该是真的

    【讨论】:

      【解决方案5】:

      试试这个,它在 Android 4.4.2 和 5.1 上检查过:

      /drawable

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-07
        • 1970-01-01
        • 2013-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多