添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
潇洒的大海  ·  Python ...·  1 年前    · 
细心的登山鞋  ·  C# Split ...·  1 年前    · 
没读研的匕首  ·  善事利器 Photoshop CC ...·  2 年前    · 

带有ImageButton的Android自定义列表视图无法获得焦点

18 人关注

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

android:descendantFocusability="blocksDescendants"

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

我还添加了 setItemsCanFocus 我的 ListView ,但没有运气,没有任何变化。 我读了很多文件,但我找不到这个问题的正确答案。我想把重点放在列表行和 ImageButton 上。这可能吗?如果有人知道,请帮助我......

android
android-listview
focus
imagebutton
nidhi_adiga
nidhi_adiga
发布于 2013-03-06
6 个回答
RobinHood
RobinHood
发布于 2022-07-22
已采纳
0 人赞同

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

由于行文件内有多个视图,视图被挂起,为了得到点击,你必须在你的行xml的主布局上再添加一个属性。

android:descendantFocusability="blocksDescendants

但当我写下上述属性后,我就无法关注我的行文件中的ImageButton了。

我刚刚尝试了一种方法来实现在 ImageButton listview 上获得foucus。

为了获得ImageButton的焦点。

  • Create one selector file.
  • Applied on Imagebutton.
  • Added android:focusableInTouchMode="true" to ImageButton.
  • To get focus on Listview:

  • Add android:descendantFocusability="blocksDescendants to main-layout within row xml.
  • 现在,当你点击你的ImageButton时,它将以你想要的颜色聚焦,甚至在点击listview时也会聚焦。

    Selecotor.xml

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

    在S3模拟器中测试,工作良好。

    我做了以上所有的事情,但它在nexus 7模拟器和电视中都不工作。我想这是因为电视上没有触摸屏,所以android:focusableInTouchMode="true "不起作用。
    焦点是要列出行和按钮...?
    naeemgik
    naeemgik
    发布于 2022-07-22
    0 人赞同

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

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

    因此,我的问题得到了解决。

    注意:只添加android:focusableInTouchMode="true "是不行的,你必须在focusableInTouchMode true之后,使布局可点击为true。

    M.J
    M.J
    发布于 2022-07-22
    0 人赞同

    我在listView中也遇到了同样的问题,但我找到了解决办法,只要用imageView代替image按钮,那么行就可以被点击,也可以被聚焦。

    注意:当我们在listView中使用button或imagebutton时,列表视图的行会被禁用,以防止这种情况发生,请使用view或imageview代替。
    Hope so this will help you.

    我无法让ImageButton工作,即使有所有建议的评论,但这是有效的。
    CHANDRA D P
    CHANDRA D P
    发布于 2022-07-22
    0 人赞同

    在自定义行的父布局中添加以下代码。

    android:descendantFocusability="blocksDescendants"
    

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

    android:focusable="false"
    android:focusableInTouchMode="false"
        
    Gordak
    Gordak
    发布于 2022-07-22
    0 人赞同

    您是否尝试过:

    setFocusableInTouchMode(false);
    
    setFocusable(false);
    

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

    谢谢你的时间,但如果用户不能聚焦,那么用遥控器就不知道他是否在正确的ImageButton上......
    javed khan
    javed khan
    发布于 2022-07-22
    0 人赞同

    列表视图中的项目在安卓电视遥控器上不能被聚焦。 我是这样解决的。

    如果你使用的是列表视图或回收器视图。 在OnBindView方法中。 列表视图/回收器视图的单个项目的根布局

    rootLayout.setOnFocusChangeListener(new View.OnFocusChangeListener() {
                @Override
                public void onFocusChange(View view, boolean b) {
                    if(b){  
                      rootLayout.setCardBackgroundColor(context.getColor(R.color.grey));
                    }else {