第一次在这里问一个问题,让我们看看......
我无法以编程方式将涟漪效果设置到CardView上。 (但我希望找到一种基本上适用于任何视图的方法)问题是,我的卡片是以编程方式制作的:
...
//make cardview
CardView result = new CardView(Activity);
//set layout
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(0, 100, 1f);
layoutParams.SetMargins(10, 10, 10, 10);
result.LayoutParameters = layoutParams;
result.Tag = itemId.ToString();
//FAILED ATTEMPT 1:
//result.Foreground = "?android:attr/selectableItemBackground";
//FAILED ATTEMPT 2 :
//result.SetBackgroundDrawable(view.Resources.GetDrawable(Resource.Drawable.ripple));
...
现在你可以看到我根据可以找到here的类似问题的答案尝试使用前景属性。
第二次尝试让我感觉它在正确的道路上,但它使我的所有卡片都不可见 - 是link。 (我将ripple.xml添加到我项目的drawable文件夹中)
我还找到了RippleDrawable类,但我真的不明白如何正确使用它。它要求使用面具和内容可绘制,但我不知道该放什么。到目前为止我的实现:
result.Background = new RippleDrawable(view.Resources.GetColor(Resource.Color.green),????,?????);
我想要涟漪效果的主要原因是因为我显示了一张卡片列表,并且它们都有一个打开弹出菜单的onLongClick事件。我想表明这些卡是可点击的。
无论如何,我希望有人可以帮我找到解决方案。
**更新:**卡片使用pre-android 5的代码转为隐形。
...
result.Tag = itemId.ToString();
TypedValue outValue = new TypedValue();
this.Activity.Theme.ResolveAttribute(Android.Resource.Attribute.SelectableItemBackground, outValue, true);
result.SetBackgroundResource(outValue.ResourceId);
答案 0 :(得分:2)
嗯,聪明的做法就是这样:
注意:以下代码在API-21或Android Lollipop下运行的设备中无效。
将以下XML添加到布局文件夹中。
<强> Ripple.xml 强>
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:color="@color/yourViewRippleColor"
tools:targetApi="lollipop">
<item>
<color android:color="@color/yourViewBackgroundColor" />
</item>
<item android:id="@android:id/mask">
<shape android:shape="rectangle">
<solid android:color="@color/yourViewRippleColor" />
</shape>
</item>
</ripple>
在需要时使用它:
_yourView.SetBackgroundResource(Resource.Layout.Ripple);
如果我没有错,你可以使用类似的东西以编程方式完成:
注意:应该适用于蜂窝上方和蜂窝上的任何设备。
TypedValue outValue = new TypedValue();
this.Theme.ResolveAttribute(Android.Resource.Attribute.SelectableItemBackground, outValue, true);//In an Activity
this.Activity.Theme.ResolveAttribute(Android.Resource.Attribute.SelectableItemBackground, outValue, true);//In an Fragment
_YourView.SetBackgroundResource(outValue.ResourceId);
古德勒克!
如果您有查询还原。