Программная настройка фона TextView

Я определил фон для своего TextView:

<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape= "rectangle"  >
    <solid android:color="#000"/>
    <stroke android:width="1dp"  android:color="#ff9"/>
</shape>

Теперь я пытаюсь установить его на свой TextView программно:

textview.setBackground((Drawable)findViewById(R.drawable.cellborder));

Однако это не работает, оно говорит мне, что не может преобразовать View в Drawable. Есть ли другой способ сделать это?


person Nat    schedule 30.08.2015    source источник
comment
Вы пробовали setBackgroundDrawable()?   -  person GuilhE    schedule 30.08.2015


Ответы (3)


Вы должны использовать

getResources().getDrawable(R.drawable.cellborder);

который вернет Drawable.

Если вы используете findViewById(), он попытается найти View в иерархии представлений и вернуть его. View — это не Drawable, поэтому вы не можете его разыграть.

person ci_    schedule 30.08.2015

Если вам нужна обратная совместимость, используйте следующее:

textView.setBackground(ContextCompat.getDrawable(MainActivity.this, R.drawable.cellborder));

Замените MainActivity.this именем действия, из которого вы вызываете эти методы.

Если вы вызываете textView.setBackground(...) из активности Pijamas, сделайте следующее:

textView.setBackground(ContextCompat.getDrawable(Pijamas.this, R.drawable.cellborder));
person Tudor    schedule 30.08.2015
comment
--- лучший путь ----- - person Noor Hossain; 26.11.2020

попробуйте установить drawable следующим образом

textview.setBackgroundDrawable( getResources().getDrawable(R.drawable.cellborder) );

посетите для получения дополнительной помощи. установить фоновый рисунок программно в Android

person Mohammad Tauqir    schedule 30.08.2015
comment
Этот метод устарел. используйте вместо этого tv.setBackground(ContextCompat.getDrawable(QuestionActivity.this, R.drawable.bg_shadow)); - person Dharmishtha; 26.01.2021