ImageButton选择器无法正常工作
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ImageButton选择器无法正常工作相关的知识,希望对你有一定的参考价值。
我正在尝试为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正常工作。但我真的需要布局
答案
在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,因此您必须手动设置它。
另一答案
您的选择器看起来不正确。
我想你可能会错过状态(即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>
另一答案
在您的imageview中添加填充以查看背景选择器
<ImageButton
android:layout_width="wrap_content"
android:layout_height="@dimen/actions_height"
android:paddingn="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>
另一答案
我解决了!
我的代码里面有
btnNoRecord.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent)
{
...
return true;
}
});
我改变返回true返回false并且它正在工作!
另一答案
在这种情况下只需交换属性:
android:src
android:background
至
android:src="@drawable/selector"
android:background="@drawable/ic_action_record"
暗示。您可以删除背景:
android:background="@null"
以上是关于ImageButton选择器无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章
android在使用选择器xml按下时更改ImageButton的图像