Android 当触摸外部时,按钮会松开焦点
我在recyclerview中有一个按钮作为itemview,它有背景和文本选择器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_
<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事件上刷新。你能把适配器放在你的问题里吗?