3

我正在尝试使我的应用程序对键盘驱动的导航友好,并且我在所有可操作的项目周围添加了一个焦点突出显示。在触摸模式下操作时,我无法移除焦点突出显示。换句话说,我不希望在不使用键盘导航时突出显示焦点。这可能吗?我正在我的选择器 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 中将其重新编码为自定义可绘制对象,但问题是可绘制对象无法查询触摸模式,也无法访问其视图。还有其他选择吗?

4

0 回答 0