5

我正在尝试为 ImageView 设置选择器,但它不起作用

我的布局

 <LinearLayout
        android:id="@+id/actionLayout"
        android:orientation="horizontal"
        android:background="@color/orange_color"
        android:gravity="center_vertical"
        android:paddingTop="@dimen/actions_top_bottom"
        android:paddingBottom="@dimen/actions_top_bottom"

        android:focusable="false"
        android:focusableInTouchMode="false"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">

        <ImageButton
            android:layout_width="wrap_content"
            android:layout_height="@dimen/actions_height"
            android:id="@+id/btnNoRecord"
            android:scaleType="centerInside"
            android:src="@drawable/ic_action_record"
            android:onClick="onRecordSwitcherClick"
            android:layout_weight="1"
            android:background="@drawable/selector"/>
...
</LinearLayout>

我的 selector.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <shape android:shape="rectangle">
            <solid android:color="@color/dark_orange_color"/>
        </shape>
    </item>
    <item>
        <shape android:shape="rectangle">
            <solid android:color="@color/orange_color"/>
        </shape>
    </item>
</selector>

错误在哪里?也许 LinearLayout 属性中存在一些错误?

编辑 我刚刚发现 LinearLayout 之外的 ImageButton 工作正常。但我真的需要布局

4

6 回答 6

3

在你的设置clickable属性,ImageButton如下所示:

<ImageButton
    android:layout_width="wrap_content"
    android:layout_height="@dimen/actions_height"
    android:id="@+id/btnNoRecord"
    android:src="@drawable/ic_action_record"
    android:background="@drawable/selector"
    android:clickable="true"/>

ImageButton由 扩展而来ImageView。该clickable属性默认为 false,因此您必须手动设置它。

于 2015-05-25T07:50:39.847 回答
2

您的选择器看起来不正确。

我认为您可能会错过状态(即 state_focused="true" 等)。重要的是要记住选择器是按从上到下的顺序分析的(所以如果首先遇到一个状态,选择器中的其他项目将被忽略 - 即顺序很重要)。

<selector
    xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:drawable="@drawable/btn_settings_inset_top_pressed"
        android:state_focused="true"
        android:state_pressed="true"/>
    <item
        android:drawable="@drawable/btn_settings_inset_top_pressed"
        android:state_focused="false"
        android:state_pressed="true"/>
    <item
        android:drawable="@drawable/btn_settings_inset_top"
        android:state_focused="true"
        android:state_pressed="false"/>
    <item
        android:drawable="@drawable/btn_settings_inset_top"
        android:state_focused="false"
        android:state_pressed="false"/>
</selector>
于 2013-10-17T19:45:12.400 回答
1

在您的图像视图中添加填充以查看背景选择器

    <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="@dimen/actions_height"
        android:padding="5dp"
        android:id="@+id/btnNoRecord"
        android:scaleType="centerInside"
        android:src="@drawable/ic_action_record"
        android:onClick="onRecordSwitcherClick"
        android:layout_weight="1"
        android:background="@drawable/selector"/>

                         OR 

像这样尝试,这将起作用,您必须提供填充以便背景选择器可见

<selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:state_pressed="true">
       <shape android:shape="rectangle">
            <solid android:color="@color/dark_orange_color"/>
            <padding
            android:bottom="5dp"
            android:left="5dp"
            android:right="5dp"
            android:top="5dp" />
      </shape>
</item>
<item>
      <shape android:shape="rectangle">
          <solid android:color="@color/orange_color"/>
          <padding
            android:bottom="5dp"
            android:left="5dp"
            android:right="5dp"
            android:top="5dp" />
      </shape>
</item>
</selector>
于 2013-10-17T19:42:30.820 回答
1

我已经解决了!

在我的代码里面我有

btnNoRecord.setOnTouchListener(new View.OnTouchListener() {
   @Override
   public boolean onTouch(View view, MotionEvent motionEvent)
   {
       ...
       return true;
   }
});

我将return true更改为return false并且它正在工作!

于 2013-10-18T06:26:07.793 回答
0

在这种情况下,只需交换属性:

android:src
android:background

android:src="@drawable/selector"
android:background="@drawable/ic_action_record"

暗示。您可以通过以下方式删除背景:

android:background="@null"
于 2019-04-14T08:39:27.990 回答
0

我知道已经晚了,但这仍然需要一些解释。StackOverflow 上有很多这样的问题,但没有人真正解释为什么会这样。请记住,每当您应用ScaleType到视图时,它的选择器可绘制对象将不会显示,除非您给它一些填充。真正发生了什么,是它取出了所有的视图宽度和高度。并且选择器确实有效,但是 src, drawable 与它重叠。而且它似乎不起作用。尤其是在FitXY. 尝试一些填充它。它会起作用。您可以稍后感谢我。

于 2019-09-14T22:10:17.737 回答