Как я могу добавить selectableItemBackground в ImageButton программно?

Android.R.attr.selectableItemBackground существует, но как добавить его программно в ImageButton?

Кроме того, как я могу найти ответ в документации? Это упоминается здесь , но я не вижу никакого объяснения того, как это фактически используется. На самом деле, я редко вижу, что документация полезна, но я надеюсь, что это моя вина, а не документация.

Solutions Collecting From Web of "Как я могу добавить selectableItemBackground в ImageButton программно?"

Вот пример использования ответа здесь: Как получить ссылку attr в коде?

// 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 (ie '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); 

Если вы используете AppCompat, вы можете использовать следующий код:

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

Это работает для меня с помощью TextView :

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

Поскольку я использую библиотеку AppCompat, я использую R.attr.selectableItemBackground не android.R.attr.selectableItemBackground .

Я думаю, что typedValue.resourceId содержит все drawables из TypeArray#getResourceId(index, defValue) чем использование TypeArray#getResourceId(index, defValue) или TypeArray#getDrawable(index) которые извлекают только данные, доступные для данного index .