如何以编程方式在LinearLayout上设置Ripple效果?

时间:2012-01-04 19:18:57

标签: android background android-linearlayout clickable

我想将背景android.R.attr.selectableItemBackground设置为LinearLayout。使用XML时没有问题(可行)

<LinearLayout
    android:id="@+id/llMiner"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="?android:attr/selectableItemBackground"
    android:clickable="true" >

...但是我必须在java代码中这样做,所以我试过这个

llMiner.setClickable(true);
llMiner.setBackgroundResource(android.R.attr.selectableItemBackground);

...它不起作用,事实上我在第二行得到NotFoundException。 所以在我尝试了这个变体后认为资源是一个颜色。

llMiner.setClickable(true);
llMiner.setBackgroundColor(android.R.attr.selectableItemBackground);

这个没有启动异常,但是......不起作用(按下时没有改变背景,但按下状态改变了按钮)...任何建议?

1 个答案:

答案 0 :(得分:93)

你可以这样使用。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
    // If we're running on Honeycomb or newer, then we can use the Theme's
    // selectableItemBackground to ensure that the View has a pressed state
    TypedValue outValue = new TypedValue();
    getContext().getTheme().resolveAttribute(android.R.attr.selectableItemBackground, outValue, true);
    textView.setBackgroundResource(outValue.resourceId);
}