web-dev-qa-db-fra.com

Comment définir l'effet d'ondulation sur un LinearLayout par programme?

Je veux définir l'arrière-plan Android.R.attr.selectableItemBackground vers un LinearLayout. Lors de l'utilisation de XML, il n'y a aucun problème (cela fonctionne)

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

... mais je dois le faire en Java, donc j'ai essayé cela

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

... et ça ne marche pas, en fait j'obtiens un NotFoundException sur cette deuxième ligne. Donc, après avoir essayé cette variante en pensant que la ressource est une couleur.

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

Celui-ci ne lance pas d'exception, mais ... ne fonctionne pas (il n'y a pas de changement de fond lors de la pression, mais le changement d'état est pressé comme il doit le faire) ... une suggestion?

39
Splact

Vous pouvez utiliser de cette façon.

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);
}
99
Wooseong Kim