Как програмно да настроите ефекта 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 от темата на pre lollipop устройство - person Anthone; 28.08.2015
comment
Ако искате да запазите цветовете на вашата тема, използвайте R.attr.selectableItemBackground вместо android.R.attr.selectableItemBackground - person Quentin G.; 11.09.2015
comment
Използването на R.attr.selectableItemBackground ще използва атрибута на AppCompat (ако включвате това) и ще се върне към избледняване/изчезване вместо пулсации за преди Lollipop, по подразбиране. Имайте предвид, че R е вашето packagename.R. - person Sufian; 02.04.2016
comment
Гласувайте за работещия отговор, наистина помага, благодаря - person ucMedia; 02.09.2019