触摸外面时按钮失去焦点

时间:2018-02-18 06:51:40

标签: android xml button selector ontouchevent

我在recyclerview中有一个按钮作为项目视图,它有背景和文本选择器。

<Button xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/channel"
android:layout_width="wrap_content"
android:layout_height="32dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:background="@drawable/channel_bg"
android:focusableInTouchMode="true"
android:gravity="center"
android:textColor="@color/channel_text_selector"
android:textSize="12sp" />

这是我的 @ drawable / channel_bg

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true">
    <shape android:shape="rectangle">
        <solid android:color="@color/colorPrimary" />
        <corners android:radius="18dp" />
    </shape>
</item>
<item android:state_pressed="true">
    <shape android:shape="rectangle">
        <solid android:color="@color/colorPrimary" />
        <corners android:radius="18dp" />
    </shape>
</item>
<item>
    <shape android:shape="rectangle">
        <stroke android:width="1dp" android:color="@color/colorPrimary" />
        <solid android:color="@android:color/white" />
        <corners android:radius="18dp" />
    </shape>
</item>

这是我的 @ color / channel_text_selector

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@android:color/white" android:state_pressed="true" />
<item android:color="@android:color/white" android:state_selected="true" />
<item android:color="@android:color/white" android:state_focused="true" />
<item android:color="@color/colorPrimary" />

当我触摸/点击同一屏幕上的任何其他视图时,按钮会失去焦点并进入未选择状态。请帮助我。

1 个答案:

答案 0 :(得分:1)

您的按钮失去了焦点,因为它的默认行为,如果您没有触摸它,它就没有集中注意力。如果您希望在单击其他视图后聚焦按钮,则应在OnFocusChangeListener

中以编程方式请求聚焦
 btn.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View view, boolean b) {
            btn.requestFocus();
        }
    });

因此,当按钮变得“未聚焦”时,#34;仍然会要求重点,但有一点需要注意。您也需要在需要时将其删除。或者它会被集中注意力。

button.clearFocus();

您还应该保留一个布尔变量(如评论中所建议的那样),然后在重新绘制回收器的情况下检查布尔值并请求焦点,或者如果您愿意,可以在以后删除它