Android TV 按钮不显示聚焦的可绘制对象
Android TV button does not show focused drawable
我打算在 Android 电视上发布游戏。我开发了包含一些按钮的游戏主屏幕。
我需要的是为每个按钮状态设置不同的可绘制对象。我只需要三种状态:
- 默认
- 专注
- 按下
为了根据不同的按钮状态显示不同的可绘制对象,我创建了以下 .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 文件夹中。我完全遵循了 Google 在这里的建议:https://developer.android.com/training/tv/start/navigation.html
然后我将按钮的背景设置为之前的 .xml 文件,如下所示:
<Button
android:id="@+id/start"
android:layout_width="250.0dip"
android:layout_height="60.0dip"
android:layout_marginTop="20dip"
android:background="@drawable/buttonquickgame"
android:onClick="OnClickButton"
/>
问题是应用程序加载,按钮具有默认状态图标,当我按下它时,它会正确显示按下的可绘制对象,但无论如何它都不会显示聚焦的可绘制对象。
我什么都试过了。我什至以编程方式请求焦点,焦点可绘制对象不会出现。我已经在模拟器和我的索尼 Android 电视中检查了这种行为,但没有成功。
你知道我在这里遗漏了什么吗?
非常感谢您!
经过大量的反复试验,我找到了可行的解决方案。
新的select或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 中,我手动 select 按钮并像这样请求焦点:
Button quick_start = (Button) findViewById(R.id.start);
quick_start.setSelected(true);
quick_start.requestFocus();
现在它在我的 AndroidTV 和模拟器上运行良好。
如果您遇到类似的问题,我希望这个回答能为您节省一些时间!
我打算在 Android 电视上发布游戏。我开发了包含一些按钮的游戏主屏幕。
我需要的是为每个按钮状态设置不同的可绘制对象。我只需要三种状态:
- 默认
- 专注
- 按下
为了根据不同的按钮状态显示不同的可绘制对象,我创建了以下 .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 文件夹中。我完全遵循了 Google 在这里的建议:https://developer.android.com/training/tv/start/navigation.html
然后我将按钮的背景设置为之前的 .xml 文件,如下所示:
<Button
android:id="@+id/start"
android:layout_width="250.0dip"
android:layout_height="60.0dip"
android:layout_marginTop="20dip"
android:background="@drawable/buttonquickgame"
android:onClick="OnClickButton"
/>
问题是应用程序加载,按钮具有默认状态图标,当我按下它时,它会正确显示按下的可绘制对象,但无论如何它都不会显示聚焦的可绘制对象。
我什么都试过了。我什至以编程方式请求焦点,焦点可绘制对象不会出现。我已经在模拟器和我的索尼 Android 电视中检查了这种行为,但没有成功。
你知道我在这里遗漏了什么吗?
非常感谢您!
经过大量的反复试验,我找到了可行的解决方案。
新的select或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 中,我手动 select 按钮并像这样请求焦点:
Button quick_start = (Button) findViewById(R.id.start);
quick_start.setSelected(true);
quick_start.requestFocus();
现在它在我的 AndroidTV 和模拟器上运行良好。
如果您遇到类似的问题,我希望这个回答能为您节省一些时间!