Android — Программно установите фон TextView на drawable перед API 24

#java #android #textview

#java #Android #textview

Вопрос:

Я пытаюсь установить фон TextView, который действует как кнопка для вектора XML.

 
    if (condition) {
       textViewButton.setBackgroundResource(R.drawable.button_selected);
      } else if (condition) {
       textViewButton.setBackgroundResource(R.drawable.button_correct);
      } else {
        textViewButton.setBackgroundResource(R.drawable.button_unselected);
      } 

 

Я думаю, что это было введено в API24, и я не могу загрузить его на свой тестовый телефон API22, так как получаю следующую ошибку:

    Caused by: android.content.res.Resources$NotFoundException: Resource ID #0x7f070069
        at android.content.res.Resources.getValue(Resources.java:1324)
        at android.content.res.Resources.getDrawable(Resources.java:828)
        at android.content.Context.getDrawable(Context.java:408)
        at android.view.View.setBackgroundResource(View.java:16251)
        at androidx.appcompat.widget.AppCompatTextView.setBackgroundResource(AppCompatTextView.java:113)<
 

Есть ли какой-нибудь способ внести эти изменения в дизайн ImageView программно для старых API?(отлично работает с API 29 и 30)

Ответ №1:

Это рекомендуемый способ

textViewButton.setBackground(ContextCompat.getDrawable(context,R.drawable.button_selected));

Если это не работает в вашем приложении build.gradle , вам необходимо включить:

 android {
    defaultConfig {
        vectorDrawables.useSupportLibrary = true
    }
}
 

И добавьте следующее к onCreate :

 AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);  

 
 

Комментарии:

1. Спасибо! В конце концов ваше решение сработало, сначала я все еще получал ту же ошибку, но затем я заметил, что Android Studio поместила мой «button_unselected» для рисования в папку v24, а другие кнопки для рисования в папку xxhdpi, после перемещения файла это сработало в конце.