ImageView选择器不起作用。

7

我正在我的应用程序中形成类似于选项卡的布局,其中包含几个ImageView。当我选择一个项目时,图像将更改。但是,我尝试单击它,什么都不会发生!为什么?

activity_main.xml

<TableLayout 
    android:id="@+id/main_tab_bar"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:stretchColumns="0,1,2,3,4">
    <TableRow
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <ImageView 
            android:id="@+id/news"
            android:clickable="true"
            android:focusable="true"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/main_tab_news_selector"/>
        <ImageView 
            android:id="@+id/share"
            android:clickable="true"
            android:focusable="true"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/main_tab_share_selector"/>
        <ImageView 
            android:id="@+id/camera"
            android:clickable="true"
            android:focusable="true"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/main_tab_camera_selector"/>
        <ImageView 
            android:id="@+id/status"
            android:clickable="true"
            android:focusable="true"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/main_tab_status_selector"/>
        <ImageView 
            android:id="@+id/others"
            android:clickable="true"
            android:focusable="true"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/main_tab_others_selector"/>
    </TableRow>
</TableLayout>

main_tab_news_selector.xml(其他选择器只是类似的)

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item 
        android:drawable="@drawable/ic_action_time"
        android:state_focused="true"
        />
    <item android:drawable="@drawable/ic_action_view_as_list" />

</selector>
5个回答

8
只需将此代码添加到您的ImageView即可。
android:clickable="true"  

对我来说完美无缺。 - Aditya Gupta
2
android:focusable="true" 会允许焦点状态颜色。 - Usama Saeed US

6
您的可绘制XML代码应如下所示:

您的drawable xml代码应该长成这个样子

<selector
  xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@drawable/pressed.png" />
    <item android:state_selected="true" android:drawable="@drawable/select.png" />
   <item android:state_activated="true" android:drawable="@drawable/pressed.png" />
    <item android:drawable="@drawable/normal.png" />
</selector>

为什么你不使用图像按钮? - Amy
它只在按下时起作用,但我该如何选择它?就像选择一个选项卡一样? - Simon
使用android:state_activated=true - Amy
让我们在聊天中继续这个讨论。点击此处进入聊天室 - Amy
该项 android:state_activated="false"。 - Gilberto Ibarra

2

focusableInTouchMode设置为true,并在选择器中监听其state_focus

这样可以解决问题 :)

activity_main.xml

<TableLayout 
    android:id="@+id/main_tab_bar"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:stretchColumns="0,1,2,3,4">
    <TableRow
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <ImageView 
            android:id="@+id/news"
            android:clickable="true"
            android:focusable="true"
            android:focusableInTouchMode="true"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/main_tab_news_selector"/>
        <ImageView 
            android:id="@+id/share"
            android:clickable="true"
            android:focusable="true"
            android:focusableInTouchMode="true"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/main_tab_share_selector"/>
        <ImageView 
            android:id="@+id/camera"
            android:clickable="true"
            android:focusable="true"
            android:focusableInTouchMode="true"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/main_tab_camera_selector"/>
        <ImageView 
            android:id="@+id/status"
            android:clickable="true"
            android:focusable="true"
            android:focusableInTouchMode="true"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/main_tab_status_selector"/>
        <ImageView 
            android:id="@+id/others"
            android:clickable="true"
            android:focusable="true"
            android:focusableInTouchMode="true"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/main_tab_others_selector"/>
    </TableRow>
</TableLayout>

选择器
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item 
        android:drawable="@drawable/ic_action_time"
        android:state_focused="true"
        />
    <item 
        android:drawable="@drawable/ic_action_time"
        android:state_pressed="true"
        />

    <item android:drawable="@drawable/ic_action_airplane_mode_on" />

</selector>

1

您需要将

  1. ImageView更改为ImageButton
  2. src更改为background

src也可以使用,但它会在可绘制图像周围显示一些空间。

android:drawable="@drawable/ic"之前写入android:state_focused="true"


0
如果您在视图上设置了onTouchListener,则在onTouch(View view, MotionEvent motionEvent)中,您必须返回false。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接