在drawable文件夹中:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@drawable/icon2" />
<item android:drawable="@drawable/icon3" />
</selector>
布局只是填充整个空间的简单线性布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:background="@drawable/on_touch_"
android:weightSum="1" android:focusable="true" android:focusableInTouchMode="true">
</LinearLayout>
当我按此时没有任何反应
例如,如果我添加一些textview并指定android:background="@drawable/on_touch_"
,则按下该文本视图时会更正图像。
线性布局的问题在于,为何在按下时不会改变图像?
编辑: 我确信我的drawable选择器很好并且工作正常,因为我把它作为其他元素的背景并且它正在工作。
但我的问题是如何将drawable设置为 root 元素
答案 0 :(得分:6)
将此添加到您的布局:
android:clickable="true"
这将在您单击时设置按下状态。
答案 1 :(得分:0)
试试
save_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true" android:state_pressed="false"
android:drawable="@drawable/save_hover_new" />
<item android:state_focused="true" android:state_pressed="true"
android:drawable="@drawable/save_hover_new" />
<item android:state_focused="false" android:state_pressed="true"
android:drawable="@drawable/save_hover_new" />
<item android:drawable="@drawable/save_new" />
</selector>
并将布局的背景作为选择器 机器人:背景=“@绘制/ save_selector
答案 2 :(得分:0)
我会确保我没有可画的同名词。您好像使用on_touch_.xml
作为选择器。是否还有on_touch_.png
?
我还要确保我没有在代码中再次设置背景,其他内容或使其无法点击。
答案 3 :(得分:0)
我在根元素中有一个选择器,工作正常;按下时背景会切换。它不是活动布局的根元素,但它是XML文件的根元素。
首先为背景指定了一个png:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:background="@drawable/panel"
>
...
仅在分配OnClickListener时将背景分配给选择器:
private void setClickListener(OnClickListener ocl) {
View boxRoot = findViewById(R.id.box_root);
if (ocl != null) {
boxRoot.setOnClickListener(ocl);
boxRoot.setBackgroundDrawable(getResources().getDrawable(R.drawable.panel_arrow_right_bgstate));
setClickable(true);
...
在我的XML中,我使用了android:clickable="true"
,但之后我还添加了android:focusable="true" android:focusableInTouchMode="true"
以符合您的情况。这也很好,我的所有四个州的背景切换。
// panel_arrow_right_bgstate.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="false" android:state_pressed="false" android:drawable="@drawable/panel_arrow_right_normal"/>
<item android:state_focused="false" android:state_pressed="true" android:drawable="@drawable/panel_arrow_right_pressed"/>
<item android:state_focused="true" android:state_pressed="false" android:drawable="@drawable/panel_arrow_right_selected"/>
<item android:state_focused="true" android:state_pressed="true" android:drawable="@drawable/panel_arrow_right_pressed"/>
如果这对您不起作用,那么您的代码在其他地方还有其他问题。
当我添加或删除drawable时,Eclipse有时会变得浑浊并将它们混合起来。我的正常测量值是: