Android TV 按钮不显示焦点可绘制对象

Posted

技术标签:

【中文标题】Android TV 按钮不显示焦点可绘制对象【英文标题】:Android TV button does not show focused drawable 【发布时间】:2017-01-30 18:49:18 【问题描述】:

我计划在 android TV 上发布游戏。我已经开发了包含一些按钮的游戏主屏幕。

我需要为每个按钮状态设置不同的可绘制对象。我只需要三个状态:

    默认 专注 按下

为了根据不同的按钮状态显示不同的drawable,我创建了以下.xml文件:

buttonquickgame.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="@drawable/greenbutton_focused" /> <!-- pressed -->
    <item android:state_focused="true"
        android:drawable="@drawable/greenbutton_focused" /> <!-- focused -->
    <item android:drawable="@drawable/greenbutton" /> <!-- default -->
</selector>

我已将此 xml 文件放在 res/drawable 文件夹中。我完全按照谷歌在这里的建议:https://developer.android.com/training/tv/start/navigation.html

然后我将按钮的背景设置为之前的 .xml 文件,如下所示:

<Button
    android:id="@+id/start"
    android:layout_
    android:layout_
    android:layout_marginTop="20dip"
    android:background="@drawable/buttonquickgame"
    android:onClick="OnClickButton"
    />

问题是应用程序加载,按钮具有默认状态图标,当我按下它时,它会正确显示按下的drawable,但无论如何它都不会显示聚焦的drawable。

我什么都试过了。我什至以编程方式请求焦点,焦点可绘制不会出现。我在模拟器和我的 Sony Android TV 中检查了这种行为,但没有成功。

您对我在这里缺少什么有任何想法吗?

非常感谢您!

【问题讨论】:

【参考方案1】:

经过数小时的反复试验,我找到了可行的解决方案。

新的选择器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="@drawable/orangebutton_pressed" /> <!-- pressed -->
    <item android:state_focused="true"
        android:drawable="@drawable/orangebutton_focused" /> <!-- focused -->
    <item android:drawable="@drawable/orangebutton" /> <!-- default -->
    <item android:drawable="@drawable/orangebutton_focused" android:state_focused="true" android:state_pressed="false" android:state_selected="true"/>

</selector>

在 Activity 中,我手动选择按钮并请求焦点,如下所示:

   Button quick_start = (Button) findViewById(R.id.start);
   quick_start.setSelected(true);
   quick_start.requestFocus();

现在它在我的 AndroidTV 和模拟器上运行良好。

如果您遇到类似问题,我希望这个答案可以为您节省一些时间!

【讨论】:

以上是关于Android TV 按钮不显示焦点可绘制对象的主要内容,如果未能解决你的问题,请参考以下文章

FAB 按钮未在 android studio 布局编辑器中正确显示可绘制对象

按钮不显示正确的颜色 - Android Studio

Android Edittext Drawable 点击卡住焦点

Android TV 焦点与按键事件分析

Android TV 焦点与按键事件分析

Android TV中按键事件和焦点处理总结