我使用水平回收视图作为自定义底部导航栏。我想为每个项目定义一个按下状态,以便它们的颜色可以改变。
我试图这样做,但无法管理
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/menu_pressed" android:state_activated="true" />
<item android:drawable="@color/menu_pressed" android:state_pressed="true" />
<item android:drawable="@color/menu_pressed" android:state_checked="true" />
<item android:drawable="@color/menu_pressed" android:state_focused="true" />
<item android:drawable="@color/menu" />
</selector>
回收者视图:
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="65dp"
android:layout_gravity="bottom"
android:background="@drawable/menu_selector"
android:fadingEdge="vertical|horizontal"
android:fadingEdgeLength="60dp"
android:fillViewport="false"
android:requiresFadingEdge="horizontal|vertical"
app:layoutManager="android.support.v7.widget.LinearLayoutManager"
android:clickable="true"
android:focusable="true"
android:focusableInTouchMode="true">
答案 0 :(得分:2)
使用RecyclerView,您无法像使用ListView那样为每个项目定义和设置单个选择器。它必须在观察者层面完成。
因此每个项目布局都必须将选择器设置为背景。
<FrameLayout
android:id="@+id/frame"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clickable="true"
android:background="@drawable/menu_selector">
然后在您的适配器onBind
中,您可以设置一个点击监听器,它应该可以正常工作
holder.frame.setOnClickListener {
// do something
}
答案 1 :(得分:0)
首先,您可以使用“BottomNavigationBar”它是一个Android小部件,以便更好地实现。 即使您想使用recyclelerView进行相同的实现,请在RecyclerView项目中使用这些属性,而不是使用recyclerView本身。
android:clickable="true"
android:focusable="true"
android:focusableInTouchMode="true"