it-roy-ru.com

setBackground против setBackgroundDrawable (Android)

Я хочу установить фон для рисования вида. Для этого есть два метода (насколько я вижу): setBackground и setBackgroundDrawable

Когда я использую setBackground, он говорит, что он был добавлен в уровень API 16 но минимальная версия SDK моего проекта - 7. Я предполагаю, что он не будет работать ни с чем ниже 16, я прав? Но когда я использую setBackgroundDrawable, он говорит, что это устарело.

Что я должен использовать?

246
Pijusn

Это устарело, но все еще работает, так что вы можете просто использовать его. Но если вы хотите быть полностью правильным, просто для полноты этого ... Вы бы сделали что-то вроде следующего:

int sdk = Android.os.Build.VERSION.SDK_INT;
if(sdk < Android.os.Build.VERSION_CODES.JELLY_BEAN) {
    setBackgroundDrawable();
} else {
    setBackground();
}

Чтобы это работало, вам нужно установить buildTarget api 16 и min build в 7 или что-то подобное.

396
Warpzit

Вместо этого вы можете использовать функцию setBackgroundResource(), которая находится на уровне API 1.

107
Ludovic

кажется, что в настоящее время нет никакой разницы между этими двумя функциями, как показано в исходном коде (кредит на этот пост ):

public void setBackground(Drawable background) {
    //noinspection deprecation
    setBackgroundDrawable(background);
}

@Deprecated
public void setBackgroundDrawable(Drawable background) { ... }

так что это просто решение по именованию, аналогичное тому, что для fill-parent или match-parent.

55
android developer

я знаю, что это старый вопрос, но у меня похожая ситуация, и мое решение было

button.setBackgroundResource( R.drawable.ic_button );
Drawable d = button.getBackground();

и тогда вы можете играть с «Drawable», применяя цветовые фильтры и т. д.

18
Jose De Gouveia

Используйте ViewCompat.setBackground(view, background);

13
krawa

вы могли бы использовать setBackgroundResource() вместо, т.е. relativeLayout.setBackgroundResource(R.drawable.back);

это работает для меня.

12

Теперь вы можете использовать любой из этих вариантов. И это сработает в любом случае. Ваш цвет может быть шестнадцатеричный код , например:

myView.setBackgroundResource(ContextCompat.getColor(context, Color.parseColor("#FFFFFF")));

A ресурс цвета , вот так:

myView.setBackgroundResource(ContextCompat.getColor(context,R.color.blue_background));

Или пользовательский ресурс XML , например:

myView.setBackgroundResource(R.drawable.my_custom_background);

Надеюсь, поможет!

6
Geraldo Neto

Используя Android studio 1.5.1, я получил следующие предупреждения:

Call requires API level 16 (current min is 9): Android.view.View#setBackground

и жалобы на амортизацию

'setBackgroundDrawable(Android.graphics.drawable.Drawable)' is deprecated

Используя этот формат, я избавился от обоих:

    if (Android.os.Build.VERSION.SDK_INT < Android.os.Build.VERSION_CODES.JELLY_BEAN) {
        //noinspection deprecation
        layout.setBackgroundDrawable(drawable);
    } else {
        layout.setBackground(drawable);
    }
6
Aksel Willgert

Используйте setBackgroundResource (R.drawable.xml/png)

0
baburaoS

Это работает для меня:View viewэто ваш editText, Spinner ... и т.д. Иint drawable- ваш пример прорисовываемого маршрута (R.drawable.yourDrawable)

 public void verifyDrawable (View view, int drawable){

        int sdk = Build.VERSION.SDK_INT;

        if(sdk < Build.VERSION_CODES.JELLY_BEAN) {
            view.setBackgroundDrawable(
                    ContextCompat.getDrawable(getContext(),drawable));
        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
            view.setBackground(getResources().getDrawable(drawable));
        }    
    }
0
user0987