使用ImageButton的Android自定义ListView没有获得焦点

时间:2013-03-06 14:15:32

标签: android android-listview focus imagebutton

我正在为Android TV开发一款应用。我有listviewImageButton + Textview个孩子。由于电视不接受触摸事件但使用D-PAD或轨迹球遥控器,我必须关注所有可点击的项目,以便用户知道焦点在哪里。但问题是,如果我添加

,我可以专注于列表行

android:descendantFocusability="blocksDescendants"

在自定义列表行布局中,但列表行中的ImageButton将无法获得焦点。 如果我删除上面的代码,那么ImageButton会获得焦点,但我无法点击列表行。

我还为ListView添加了setItemsCanFocus但没有运气,没有任何改变。 我读了很多文件,但我找不到这个问题的正确答案。我希望专注于List行和ImageButton。有可能,如果有人知道请帮帮我......

5 个答案:

答案 0 :(得分:20)

  

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

,我可以专注于列表行

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

android:descendantFocusability="blocksDescendants

  

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

我只是尝试了一种方法来实现ImageButton以及listview上的犯规。

关注ImageButton:

  1. 创建一个选择器文件。
  2. 应用于Imagebutton。
  3. android:focusableInTouchMode="true"添加到ImageButton。
  4. 关注Listview:

    1. android:descendantFocusability="blocksDescendants添加到行xml中的main-layout。
    2. 现在当你点击你的ImageButton时,它会聚焦你想要的颜色,即使它也会专注于listview点击。

      Selecotor.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模拟器中测试,效果很好。

答案 1 :(得分:6)

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

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

所以我的问题已经解决了。

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

答案 2 :(得分:4)

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

注意:当我们在listView中使用按钮或图像按钮时,列表视图的行将被禁用,以防止发生使用视图或图像视图。

希望这对你有帮助。

答案 3 :(得分:3)

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

android:descendantFocusability="blocksDescendants"

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

android:focusable="false"
android:focusableInTouchMode="false"

答案 4 :(得分:1)

你试过了吗?

setFocusableInTouchMode(false);

setFocusable(false);

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