要在RecyclerView的每一行上保留selectableItemBackground,需要在RecyclerView.Adapter的ViewHolder类中设置一个selector作为绑定的背景。
在ViewHolder中,您可以使用以下代码来设置selector:
public class MyViewHolder extends RecyclerView.ViewHolder { private final Context context; private final TextView myTextView;
public MyViewHolder(Context context, View view) {
super(view);
this.context = context;
myTextView = (TextView) view.findViewById(R.id.myTextView);
int[] attrs = new int[] { android.R.attr.selectableItemBackground /* index 0 */};
TypedArray ta = context.obtainStyledAttributes(attrs);
Drawable drawableFromTheme = ta.getDrawable(0 /* index */);
myTextView.setBackground(drawableFromTheme);
ta.recycle();
}
}
在上面的代码中,我们首先获取TypedArray,它包含在Android中默认的selectableItemBackground属性的背景drawable。然后,我们从typedArray中获取drawable并将其设置为row的背景,这样就可以保留高亮效果。
注意:要使此方法起作用,需要在XML布局文件中正确设置每个行的根布局属性:
android:clickable="true" android:focusable="true"
如果您的行布局不是根布局,则需要在布局中包含属性:
android:background="?android:attr/selectableItemBackground"