1. ホーム

[解決済み】Androidでプログラム的に背景を描画可能にする方法

2022-03-27 13:57:10

質問

背景を設定するには。

RelativeLayout layout =(RelativeLayout)findViewById(R.id.background);
layout.setBackgroundResource(R.drawable.ready);

というのがベストなのでしょうか?

どのように解決するのですか?

layout.setBackgroundResource(R.drawable.ready); が正しいです。

別の方法として、次のような方法もあります。

final int sdk = android.os.Build.VERSION.SDK_INT;
if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) {
    layout.setBackgroundDrawable(ContextCompat.getDrawable(context, R.drawable.ready) );
} else {
    layout.setBackground(ContextCompat.getDrawable(context, R.drawable.ready));
}

しかし、大きな画像を読み込もうとしているため、問題が発生しているのだと思います。

これ は、大きなビットマップを読み込む方法についての良いチュートリアルです。

UPDATE

getDrawable(int ) は API レベル 22 で非推奨となりました。


getDrawable(int ) は、API レベル 22 で非推奨になりました。 代わりに、サポートライブラリの以下のコードを使用する必要があります。

ContextCompat.getDrawable(context, R.drawable.ready)

のソースコードを参照すると ContextCompat.getDrawable というようなことが書かれています。

/**
 * Return a drawable object associated with a particular resource ID.
 * <p>
 * Starting in {@link android.os.Build.VERSION_CODES#LOLLIPOP}, the returned
 * drawable will be styled for the specified Context's theme.
 *
 * @param id The desired resource identifier, as generated by the aapt tool.
 *            This integer encodes the package, type, and resource entry.
 *            The value 0 is an invalid identifier.
 * @return Drawable An object that can be used to draw this resource.
 */
public static final Drawable getDrawable(Context context, int id) {
    final int version = Build.VERSION.SDK_INT;
    if (version >= 21) {
        return ContextCompatApi21.getDrawable(context, id);
    } else {
        return context.getResources().getDrawable(id);
    }
}

の詳細はこちら ContextCompat

API22では getDrawable(int, Theme) メソッドの代わりに、getDrawable(int) を使用します。

UPDATEしてください。

サポートv4ライブラリを使用する場合は、以下のようにすればすべてのバージョンで使用できます。

ContextCompat.getDrawable(context, R.drawable.ready)

アプリのbuild.gradleに以下を追加する必要があります。

compile 'com.android.support:support-v4:23.0.0' # or any version above

また、ResourceCompatを使用して、以下のように任意のAPIで使用することもできます。

import android.support.v4.content.res.ResourcesCompat;
ResourcesCompat.getDrawable(getResources(), R.drawable.name_of_drawable, null);