18

我正在为安卓电视开发一个应用程序。我有一个listviewImageButton+ Textviews 的孩子。由于电视不接受触摸事件,而是使用 D-PAD 或轨迹球遥控器,我必须将注意力集中在所有可点击的项目上,以便用户知道焦点在哪里。但问题是如果我添加我可以专注于列表行

android:descendantFocusability="blocksDescendants"

在自定义列表行布局中但ImageButton在列表行中不会获得焦点。如果我删除上面的代码然后ImageButton得到焦点但我不能点击列表行。

我也添加setItemsCanFocus了我的ListView但没有运气,没有任何改变。我阅读了很多文件,但我找不到这个问题的正确答案。我想同时关注 List 行和ImageButton. 有没有可能,有知道的请帮帮我...

4

5 回答 5

24

我必须关注所有可点击的项目,以便用户知道焦点在哪里。但问题是如果我添加我可以专注于列表行

由于行文件中的多个视图而导致视图挂起,要单击您必须在行 xml 的主布局中再添加一个属性。

android:descendantFocusability="blocksDescendants

但是当我写上面的属性时,我无法关注我的行文件中的 ImageButton。

我只是尝试了一种方法来获得关注ImageButton和关注listview

要专注于 ImageButton:

  1. 创建一个选择器文件。
  2. 应用于图像按钮。
  3. 添加android:focusableInTouchMode="true"到图像按钮。

要专注于 Listview:

  1. 添加android:descendantFocusability="blocksDescendants到行 xml 中的主布局。

现在,当您单击 ImageButton 时,它会聚焦于您想要的颜色,即使它也会聚焦于 listview 单击。

选择器.xml

<?xml version="1.0" encoding="utf-8"?>
<selector 
    xmlns:android="http://schemas.android.com/apk/res/android"
    >
    <item 
        android:state_pressed="true"
        android:drawable="@android:color/transparent" 
        /> <!-- pressed -->    
    <item 
        android:state_focused="true"
        android:drawable="@android:color/darker_gray" 
        /> <!-- focused -->    
    <item 
        android:drawable="@android:drawable/btn_star" 
        /> <!-- default -->
</selector>

在 S3 模拟器中测试,运行良好。

于 2013-04-01T12:23:37.140 回答
6

我以前也有同样的问题。我通过添加(到xml中的布局)解决了我的问题

android:focusableInTouchMode="true"
android:clickable="true"

所以我的问题解决了。

注意:仅添加 android:focusableInTouchMode="true" 不起作用,您必须在 focusableInTouchMode 为 true 之后使布局可点击为 true。

于 2013-04-02T12:54:06.027 回答
4

我在 listView 中遇到了同样的问题,但我找到了解决方案,只需使用 imageView 而不是图像按钮,然后行也可以点击和聚焦。

注意:当我们在 listView 中使用 button 或 imagebutton 时,列表视图的行会被禁用,以防止这种情况发生,而是使用 view 或 imageview。

希望这会对你有所帮助。

于 2013-04-02T13:29:30.703 回答
3

将以下代码添加到自定义行的父布局中,

android:descendantFocusability="blocksDescendants"

并将以下代码添加到该布局中的任何按钮或 ImageButton

android:focusable="false"
android:focusableInTouchMode="false"
于 2014-02-14T07:22:22.823 回答
1

你有没有尝试过 :

setFocusableInTouchMode(false);

或者

setFocusable(false);

在您的两个项目(ImageButton 和 TextView)上?

于 2013-03-06T15:52:21.067 回答