2012-01-04 14 views
31

Chcę ustawić tło android.R.attr.selectableItemBackground na LinearLayout. Podczas korzystania z XML nie ma problemów (to działa)Jak programowo ustawić efekt Ripple na LinearLayout?

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

... ale muszę to zrobić w kodzie java, więc próbowałem to

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

... i to robi Działa, w rzeczywistości otrzymuję NotFoundException w tej drugiej linii. Po wypróbowaniu tego wariantu myślę, że zasób jest kolorem.

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

Ten wyjątek nie zostanie uruchomiony, ale ... nie działa (nie ma zmiana tle po naciśnięciu, ale zmiana stanu w naciśnięty jak to zrobić) ... wszelkie sugestie ?

+0

czy zmieniasz kolor w onClick metody swojej aktywności? ??? –

+0

Nie, ja nie ... – Splact

+0

Następnie myślę, że musisz zastąpić metodę onClick, aby uzyskać funkcjonalność. –

Odpowiedz

84

Możesz użyć tej metody.

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); 
} 
+1

To faktycznie działa i jest poprawną odpowiedzią. –

+0

Nie działa dla mnie, biały kolor, nie przybywają, aby zachować colorAccent z motywu na urządzeniu pre Lollipop – Anthone

+1

Jeśli chcesz zachować kolory motywu, użyj R.attr.selectableItemBackground zamiast android.R.attr.selectableItemBackground –

Powiązane problemy