我在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" />
当我触摸/点击同一屏幕上的任何其他视图时,按钮会失去焦点并进入未选择状态。请帮助我。
答案 0 :(得分:1)
您的按钮失去了焦点,因为它的默认行为,如果您没有触摸它,它就没有集中注意力。如果您希望在单击其他视图后聚焦按钮,则应在OnFocusChangeListener
btn.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean b) {
btn.requestFocus();
}
});
因此,当按钮变得“未聚焦”时,#34;仍然会要求重点,但有一点需要注意。您也需要在需要时将其删除。或者它会被集中注意力。
button.clearFocus();
您还应该保留一个布尔变量(如评论中所建议的那样),然后在重新绘制回收器的情况下检查布尔值并请求焦点,或者如果您愿意,可以在以后删除它