我正在为Android TV开发一款应用。我有listview
个ImageButton
+ Textview
个孩子。由于电视不接受触摸事件但使用D-PAD或轨迹球遥控器,我必须关注所有可点击的项目,以便用户知道焦点在哪里。但问题是,如果我添加
android:descendantFocusability="blocksDescendants"
在自定义列表行布局中,但列表行中的ImageButton
将无法获得焦点。
如果我删除上面的代码,那么ImageButton
会获得焦点,但我无法点击列表行。
我还为ListView
添加了setItemsCanFocus
但没有运气,没有任何改变。
我读了很多文件,但我找不到这个问题的正确答案。我希望专注于List行和ImageButton
。有可能,如果有人知道请帮帮我......
答案 0 :(得分:20)
我必须关注所有可点击的项目,以便用户知道焦点在哪里。但问题是,如果我添加
,我可以专注于列表行
查看由于行文件中的多个视图而导致挂起,以获得单击您必须在行xml的主布局中再添加一个属性。
android:descendantFocusability="blocksDescendants
但是当我写上面的属性时,我无法关注我的行文件中的ImageButton。
我只是尝试了一种方法来实现ImageButton
以及listview
上的犯规。
关注ImageButton:
android:focusableInTouchMode="true"
添加到ImageButton。关注Listview:
android:descendantFocusability="blocksDescendants
添加到行xml中的main-layout。现在当你点击你的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)?