我计划在Android TV上发布游戏。我开发了包含一些按钮的游戏主屏幕。
我需要的是为每个按钮状态设置不同的drawable。我只需要三种状态:
为了根据不同的按钮状态显示不同的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_width="250.0dip"
android:layout_height="60.0dip"
android:layout_marginTop="20dip"
android:background="@drawable/buttonquickgame"
android:onClick="OnClickButton"
/>
问题是应用程序加载,按钮具有默认状态图标,当我按下它时,它正确显示按下的drawable,但无论如何都不会显示聚焦drawable。
我已经尝试了一切。我甚至要求聚焦programmaticaly,焦点drawable不会出现。我在模拟器和索尼Android电视中检查过这种行为但没有成功。
你对我在这里缺少什么有什么想法吗?
非常感谢你!
答案 0 :(得分:4)
新的选择器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>
在活动I中,我手动选择按钮并请求焦点如下:
Button quick_start = (Button) findViewById(R.id.start);
quick_start.setSelected(true);
quick_start.requestFocus();
现在它在我的AndroidTV和模拟器上运行良好。
我希望如果你面临类似的问题,这个答案可以节省你一些时间!