我正在尝试使我的应用程序对键盘驱动的导航友好,并且我在所有可操作的项目周围添加了一个焦点突出显示。在触摸模式下操作时,我无法移除焦点突出显示。换句话说,我不希望在不使用键盘导航时突出显示焦点。这可能吗?我正在我的选择器 XML 中尝试几种项目状态的变体,并尝试使用不同的 focusableInTouchMode 值,但我没有得到任何结果。我有一个 EditText 定义如下:
<EditText
android:id="@+id/editText1"
android:background="@drawable/edit_text_selector"
android:focusable="true"
android:enabled="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/textView2"
android:layout_toRightOf="@+id/textView2"
android:ems="10"
android:inputType="textEmailAddress" >
<requestFocus />
</EditText>
我在这里定义了它的选择器(许多状态排列被注释掉了):
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true">
<layer-list>
<item android:drawable="@drawable/focusbox"/>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<corners android:radius="8dp" />
<stroke android:width="1dp" android:color="#044401" />
<solid android:color="@color/edit_text_color" />
</shape>
</layer-list>
</item>
<!-- <item android:state_focused="true" android:state_selected="false" android:state_activated="false">
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<corners android:radius="8dp" />
<stroke android:width="1dp" android:color="#044400" />
<solid android:color="@color/edit_text_color" />
</shape>
</item>
<item android:state_focused="false" android:state_selected="true">
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<corners android:radius="8dp" />
<stroke android:width="1dp" android:color="#044400" />
<solid android:color="@color/edit_text_color" />
</shape>
</item>
--> <item android:state_focused="false">
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<corners android:radius="8dp" />
<stroke android:width="1dp" android:color="#044400" />
<solid android:color="@color/edit_text_color" />
</shape>
</item>
</selector>
我从所学中得出的唯一想法是,我可以以编程方式检测视图是否处于触摸模式,并使用它来决定是否显示焦点突出显示。我目前有一个 XML 可绘制对象,它为焦点绘制一个框,我可以在 Java 中将其重新编码为自定义可绘制对象,但问题是可绘制对象无法查询触摸模式,也无法访问其视图。还有其他选择吗?