在具有 Android 5.0 设备的 CardView 上,没有以 selectableItemBackground 作为前景显示涟漪
Posted
技术标签:
【中文标题】在具有 Android 5.0 设备的 CardView 上,没有以 selectableItemBackground 作为前景显示涟漪【英文标题】:Ripples not showing with selectableItemBackground as foreground on a CardView with a Android 5.0 device 【发布时间】:2015-02-12 23:20:31 【问题描述】:我在 Nexus 5 上运行它。这是我的 CardView 的部分代码:
CardView cardView = new CardView(getActivity());
cardView.setRadius(4);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 400);
lp.setMargins(32, 16, 32, 16);
cardView.setLayoutParams(lp);
cardView.setContentPadding(50, 50, 50, 50);
...
cardView.setForeground(selectedItemDrawable);
这是我获得 selectedItemDrawable 的方法:
int[] attrs = new int[] R.attr.selectableItemBackground ;
TypedArray ta = getActivity().obtainStyledAttributes(attrs);
selectedItemDrawable = ta.getDrawable(0);
ta.recycle();
当我点击卡片时,不出现应该与 selectedItemDrawable 一起出现的波纹(它看起来与没有设置前景完全相同)。我正在运行 5.0,所以这看起来很奇怪,因为 appcompat 文档只说它不适用于棒棒糖之前的设备。有谁知道为什么会这样?最低 API 级别为 16,目标为 21。
【问题讨论】:
您确定,您在cardview 中没有任何设置为match_parent 并且有自己背景的视图吗? 我已经注释掉了任何向 CardView 添加视图的代码,这样布局中就只有 CardView 了,结果是一样的。将其设置为具有 CardView 中这些属性的 LinearLayout 的背景也无济于事。 确实,在xml中用android:foreground="?android:attr/selectableItemBackground"定义CardView时,仍然没有涟漪效应。 我可以使用 XML 创建波纹:android:clickable="true" 和 selectableItemBackground 前景,但我似乎无法在代码中重新创建它... 【参考方案1】:事实证明,我正在与多个卡片视图共享我的 Drawable 实例。这通过使用 getSelectedItemDrawable 方法返回一个新实例来解决:
public Drawable getSelectedItemDrawable()
int[] attrs = new int[]R.attr.selectableItemBackground;
TypedArray ta = getActivity().obtainStyledAttributes(attrs);
Drawable selectedItemDrawable = ta.getDrawable(0);
ta.recycle();
return selectedItemDrawable;
然后以编程方式将其设置为前台:
cardView.setForeground(getSelectedItemDrawable());
cardView.setClickable(true);
现在我在 5.0 上得到了连锁反应。
【讨论】:
已确认,setForeground() 仅适用于 API 23+ - Android 文档错误地将其列为 API 级别 1。此处为 AOSP 错误报告 - code.google.com/p/android/issues/detail?id=186273。 这对我不起作用。我尝试将其直接放在图像视图以及包含图像视图的框架布局上。都没有用。 你还必须在你的 cardView 上添加 android:clickable="true"以上是关于在具有 Android 5.0 设备的 CardView 上,没有以 selectableItemBackground 作为前景显示涟漪的主要内容,如果未能解决你的问题,请参考以下文章
PubNub GCM通知无法在Android 5.0及更高版本上运行
Android BLE write Characteristic 方法在 Android 5.0 及更高版本中总是返回 false