Как программно установить эффект Ripple на LinearLayout? - PullRequest
35 голосов
/ 04 января 2012

Я хочу установить фон 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 Ответ

94 голосов
/ 22 января 2015

Вы можете использовать этот способ.

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);
}
...