Как программно установить эффект Ripple на LinearLayout?

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

Этот не запускает исключение, но... не работает (нет смены фона при нажатии, но изменение состояния при нажатии, как и должно быть)... есть предложения?


person Splact    schedule 04.01.2012    source источник
comment
вы меняете цвет в методе onClick вашей деятельности..???   -  person Usama Sarwar    schedule 05.01.2012
comment
Тогда я думаю, что вы должны переопределить метод onClick, чтобы выполнить свою функциональность.   -  person Usama Sarwar    schedule 06.01.2012
comment
Я пытаюсь сделать то же самое и пока безуспешно. Если вы нашли решение, дайте мне знать, или, если кто-то знает, можно ли это сделать на самом деле, дайте отзыв. Спасибо!   -  person Sandra    schedule 16.05.2012
comment
Для тех, кто ищет аналог библиотеки поддержки, это android.support.design.R.attr.selectableItemBackground.   -  person Sufian    schedule 02.03.2016
comment
Мой предыдущий комментарий, похоже, сейчас не работает (или, может быть, никогда не работал). Сейчас работает R.attr.selectableItemBackground.   -  person Sufian    schedule 02.04.2016
comment
@Splact Пожалуйста, выберите мой ответ, если не возражаете :)   -  person Wooseong Kim    schedule 03.11.2016


Ответы (1)


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

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();
    this.getTheme().resolveAttribute(android.R.attr.selectableItemBackground, outValue, true);
    textView.setBackgroundResource(outValue.resourceId);
}
person Wooseong Kim    schedule 22.01.2015
comment
У меня не работает, белый цвет, они не прибывают, чтобы сохранить colorAccent из темы на устройстве до леденца - person Anthone; 28.08.2015
comment
Если вы хотите сохранить цвета темы, используйте R.attr.selectableItemBackground вместо android.R.attr.selectableItemBackground. - person Quentin G.; 11.09.2015
comment
Использование R.attr.selectableItemBackground будет использовать атрибут AppCompat (если вы его включаете) и по умолчанию возвращается к исчезновению/затуханию вместо ряби для pre Lollipop. Обратите внимание, что R – это ваш packagename.R. - person Sufian; 02.04.2016
comment
Проголосуйте за рабочий ответ, это действительно помогает, спасибо - person ucMedia; 02.09.2019