android attr r.java-file

android - ¿Cómo agrego selectableItemBackground a un ImageButton programmatically?



attr r.java-file (5)

android.R.attr.selectableItemBackground existe, pero ¿cómo lo agrego programáticamente a un ImageButton?

Además, ¿cómo podría encontrar la respuesta en la documentación? Se menciona here , pero no veo ninguna explicación de cómo se usa en realidad. En realidad, rara vez me parece útil la documentación, pero espero que sea por mi culpa y no por la de la documentación.


Aquí hay un ejemplo usando la respuesta aquí: ¿Cómo obtener la referencia attr en el código?

// Create an array of the attributes we want to resolve // using values from a theme // android.R.attr.selectableItemBackground requires API LEVEL 11 int[] attrs = new int[] { android.R.attr.selectableItemBackground /* index 0 */}; // Obtain the styled attributes. ''themedContext'' is a context with a // theme, typically the current Activity (i.e. ''this'') TypedArray ta = obtainStyledAttributes(attrs); // Now get the value of the ''listItemBackground'' attribute that was // set in the theme used in ''themedContext''. The parameter is the index // of the attribute in the ''attrs'' array. The returned Drawable // is what you are after Drawable drawableFromTheme = ta.getDrawable(0 /* index */); // Finally free resources used by TypedArray ta.recycle(); // setBackground(Drawable) requires API LEVEL 16, // otherwise you have to use deprecated setBackgroundDrawable(Drawable) method. imageButton.setBackground(drawableFromTheme); // imageButton.setBackgroundDrawable(drawableFromTheme);


Esto funciona para mí con mi TextView :

// Get selectable background TypedValue typedValue = new TypedValue(); getTheme().resolveAttribute(R.attr.selectableItemBackground, typedValue, true); clickableTextView.setClickable(true); clickableTextView.setBackgroundResource(typedValue.resourceId);

Como uso la biblioteca AppCompat, utilizo R.attr.selectableItemBackground no android.R.attr.selectableItemBackground .

Creo que typedValue.resourceId contiene todos los typedValue.resourceId de selectableItemBackground que utilizando TypeArray#getResourceId(index, defValue) o TypeArray#getDrawable(index) que solo recuperan un drawable en el index dado.


Prueba este método:

public Drawable getDrawableFromAttrRes(int attrRes, Context context) { TypedArray a = context.obtainStyledAttributes(new int[] {attrRes}); try { return a.getDrawable(0); } finally { a.recycle(); } }

// Entonces solo llámalo así:

getDrawableFromAttrRes(R.attr.selectableItemBackground, context) // Example ViewCompat.setBackground(view,getDrawableFromAttrRes(R.attr.selectableItemBackground, context))


Si está utilizando AppCompat, podría usar el siguiente código:

int[] attrs = new int[]{R.attr.selectableItemBackground}; TypedArray typedArray = context.obtainStyledAttributes(attrs); int backgroundResource = typedArray.getResourceId(0, 0); view.setBackgroundResource(backgroundResource); typedArray.recycle();


Use esta función de extensión en kotlin

fun View.setBackgroundResource() { val outValue = TypedValue() context.theme.resolveAttribute(R.attr.selectableItemBackground,outValue,true) this.backgroundResource = outValue.resourceId }