web-dev-qa-db-ja.com

setBackgroundとsetBackgroundDrawable(Android)

ビューの背景を描画可能にしたい。これには(私が見る限り)2つの方法があります:setBackgroundsetBackgroundDrawable

私はsetBackgroundを使用するとき、それはAPIレベル16に追加されたと言いますが、私のプロジェクトの最小SDKバージョンは7です。 16未満の何か、私は正しいですか?しかし、私がsetBackgroundDrawableを使用するとき、それはそれが非推奨であると言います。

何を使うべきですか?

249
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かそれに似たものに設定する必要があります。

397
Warpzit

代わりにsetBackgroundResource()を使用できます。これはAPIレベル1です。

108
Ludovic

ソースコード に示されているように、現在2つの関数の間に違いはないようです(クレジットこの投稿へ):

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

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

したがって、fill-parent vs match-parentを使用した場合と同様に、これは命名の決定にすぎません。

55

私はこれが古い質問であることを知っていますが、私は同様の状況を持っています、そして私の解決策は

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);

これは私のために働きます。

今、あなたはそれらのオプションのどちらかを使うことができます。そしてそれはどんな場合でもうまくいくでしょう。あなたの色は、このように16進数コードにすることができます。

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

次のようなカラーリソース

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

ビューを見るはあなたの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