问题描述
我有一个rippledrawable
,状态不同,用于选择RecyclerView
中的列表项
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/PrimaryBlue">
<item android:id="@android:id/mask">
<color android:color="@android:color/white" />
</item>
<item>
<selector>
<item android:state_activated="true">
<color android:color="@color/HeaderBackgroundGrey"/>
</item>
<item android:state_focused="true">
<color android:color="@color/HeaderBackgroundGrey"/>
</item>
<item android:state_active="true">
<color android:color="@android:color/transparent"/>
</item>
<item android:state_selected="true">
<color android:color="@android:color/transparent"/>
</item>
<item android:state_enabled="true">
<color android:color="@android:color/transparent"/>
</item>
<item android:state_checked="true">
<color android:color="@android:color/transparent"/>
</item>
<item android:state_pressed="true">
<color android:color="@android:color/transparent"/>
</item>
</selector>
</item>
</ripple>
最初,当列表加载时,列表中的第一项是@color/PrimaryBlue
颜色,但它应该是我的激活颜色,因此蓝色似乎会覆盖激活的颜色
当我在列表中选择一个项目时,我想将背景更改为深灰色,并通过在onBindViewHolder
中将视图状态设置为激活来做到这一点
holder.menu_item.isActivated = selectedPosition == position
这会将行更改为背景颜色,但列表中的第一项是我的@color/PrimaryBlue
颜色。我不知道该项目处于什么状态,因为我认为它将是聚焦状态,但是我尝试在选择器中进行设置,但仍然是蓝色。
正如您在此处看到的那样,“ Etherenet”仍然是蓝色,而“ display”是使用正确背景选择的内容。但是,以太网现在应该与“ Wifi”具有相同的颜色
我可以将蓝色从列表中的第一项移到的唯一方法是,如果我请求将焦点移至另一个视图,但是蓝色仅移至我关注的另一个列表项。
我希望当使用鼠标或通过键盘导航将行悬停在一行上时,蓝色突出显示,然后在选择该项目时,该行应显示该行的激活状态颜色,而所有其他行应为默认状态背景颜色。
这是我该行项目的布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/menu_item"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:background="@drawable/selected_background"
android:focusable="true">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/text_margin"/>
</LinearLayout>
如何删除/更改第一个列表项的状态,使其不为蓝色,甚至是在回收器视图中显示所选列表项的正确方法,同时保持其他状态通过鼠标和键盘正常工作
更新:
如果我将Drawable更改为此
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@android:color/transparent">
<item android:id="@android:id/mask">
<color android:color="@android:color/white" />
</item>
<item>
<selector>
<item android:state_activated="true">
<color android:color="@color/HeaderBackgroundGrey"/>
</item>
<item android:state_focused="true">
<color android:color="@color/ListItemBlue"/>
</item>
<item android:state_hovered="true">
<color android:color="@color/ListItemBlue"/>
</item>
<item android:state_drag_hovered="true">
<color android:color="@color/ListItemBlue"/>
</item>
</selector>
</item>
</ripple>
Adapter onBind
override fun onBindViewHolder(holder: ViewHolder,position: Int) {
val item = values[position]
holder.title.text = item
if (lastPosition == position) {
holder.menu_item.isActivated = true
holder.menu_item.requestFocus()
} else {
holder.menu_item.isActivated = false
}
}
我得到了想要的东西,但是因为我将波纹设置为透明,所以单击时不会得到波纹动画
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)