Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 当触摸外部时,按钮会松开焦点_Android_Xml_Button_Selector_Touch Event - Fatal编程技术网

Android 当触摸外部时,按钮会松开焦点

Android 当触摸外部时,按钮会松开焦点,android,xml,button,selector,touch-event,Android,Xml,Button,Selector,Touch Event,我在recyclerview中有一个按钮作为itemview,它有背景和文本选择器 <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_

我在recyclerview中有一个按钮作为itemview,它有背景和文本选择器

<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\u 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\u text\u选择器

<?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" />


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

您的按钮会失去焦点,因为这是默认行为,如果您不触摸它,它将失去焦点。如果您希望在单击其他视图后对按钮进行聚焦,则应在
OnFocusChangeListener

 btn.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View view, boolean b) {
            btn.requestFocus();
        }
    });
因此,当按钮“未聚焦”时,仍将请求聚焦,但有一个警告。当你也需要它的时候,你需要把它取下来。否则它会被聚焦

button.clearFocus();

您还应该保留一个布尔变量(正如注释中建议的那样)然后,如果您的回收器被重新绘制,请检查布尔值并请求焦点,或者稍后删除它(如果愿意)

将选定的可绘制设置为不可选择的可绘制。您应该将按钮的状态存储在某个位置,因为recyclerView将在滚动和notifyDataSetChanged事件上刷新。你能把适配器放在你的问题里吗?