【问题标题】:ImageView selector does not workImageView 选择器不起作用
【发布时间】:2014-12-04 04:58:29
【问题描述】:

我正在使用几个 ImageView 在我的应用程序中形成一个类似于 tabhost 的布局。当我选择一个项目时,图像会改变。但是,我试图点击它,没有任何反应!为什么???

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>

【问题讨论】:

    标签: android selector


    【解决方案1】:

    只需将其添加到您的 ImageView 中

    android:clickable="true"  
    

    【讨论】:

    • 非常适合我。
    • android:focusable="true" 也允许焦点状态颜色
    【解决方案2】:

    您的可绘制 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>
    

    【讨论】:

    • 为什么你不使用图像按钮?
    • 它只能在按下时工作,但我怎样才能选择它呢?喜欢选择一个标签??
    • 使用 android:state_activated=true
    • 是项目 android:state_activated="false"
    【解决方案3】:

    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>
    

    【讨论】:

      【解决方案4】:

      你必须改变

      1. ImageViewImageButton
      2. srcbackground

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

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-10-07
          • 1970-01-01
          • 2018-06-22
          • 2015-09-30
          • 1970-01-01
          • 1970-01-01
          • 2023-03-26
          相关资源
          最近更新 更多