web-dev-qa-db-ja.com

Androidでプログラムで背景を描画可能に設定する方法

背景を設定するには:

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

最善の方法はありますか?

241
Chad Bingham

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

しかし、私はあなたが大きな画像をロードしようとしているので問題が起こると思います。
He​​re は大きなビットマップをロードする方法の良いチュートリアルです。

更新:
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 に関する詳細

API 22以降、getDrawable(int)の代わりにgetDrawable(int, Theme)メソッドを使用する必要があります。

更新:
support v4ライブラリを使用している場合は、すべてのバージョンで以下の手順で十分です。

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

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

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

または、以下のようなAPIでResourceCompatを使用します。

import Android.support.v4.content.res.ResourcesCompat;
ResourcesCompat.getDrawable(getResources(), R.drawable.name_of_drawable, null);
431
Lazy Ninja

これを試して:

layout.setBackground(ContextCompat.getDrawable(context, R.drawable.ready));

そしてAPI 16 <:の場合

layout.setBackgroundDrawable(ContextCompat.getDrawable(context, R.drawable.ready));
99
Ahmad
RelativeLayout relativeLayout;  //declare this globally

今、onCreate、onResumeのような関数の中に

relativeLayout = new RelativeLayout(this);  
relativeLayout.setBackgroundResource(R.drawable.view); //or whatever your image is
setContentView(relativeLayout); //you might be forgetting this
14
Sujay Kumar

任意の画像の背景を設定することもできます。

View v;
Drawable image=(Drawable)getResources().getDrawable(R.drawable.img);
(ImageView)v.setBackground(image);
7

あなたの背景が今すぐdrawableフォルダにある場合は、プロジェクトのdrawableからdrawable-nodpiフォルダに画像を移動してみてください。これは私のために働いた、他の画像は自分で再スケーリングされているようだ..

3
Jordy

私はminSdkVersion 16とtargetSdkVersion 23を使っています。
以下は私のために働いています、それは使用します

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

使用する代わりに:

layout.setBackgroundResource(R.drawable.ready);

むしろ使用する:

layout.setBackground(ContextCompat.getDrawable(this, R.drawable.ready));

アクティビティからの呼び出しがthisを使用する場合、getActivity()がフラグメントで使用されます。

2
Vostro
if (Android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN)
     layout.setBackgroundDrawable(getResources().getDrawable(R.drawable.ready));
else if(Android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.Lollipop_MR1)
     layout.setBackground(getResources().getDrawable(R.drawable.ready));
else
     layout.setBackground(ContextCompat.getDrawable(this, R.drawable.ready));
1

butterknife を使用して、描画可能なリソースをクラスの先頭に追加して(メソッドの前に)変数にバインドします。

@Bind(R.id.some_layout)
RelativeLayout layout;
@BindDrawable(R.drawable.some_drawable)
Drawable background;

それからあなたの方法の1つの中で加えなさい

layout.setBackground(background);

必要なのはそれだけです

1
Stephen

アプリ内/ res / your_xml_layout_file 。xml

  1. 親レイアウトに名前を付けます。
  2. MainActivityに移動し、findViewById(R.id。 "given_name")を呼び出してRelativeLayoutを見つけます。
  3. メソッドsetBackgroundColor()を呼び出して、レイアウトを古典的なオブジェクトとして使用します。
0
Vaggos Phl

これを試して。

 int res = getResources().getIdentifier("you_image", "drawable", "com.my.package");
 preview = (ImageView) findViewById(R.id.preview);
 preview.setBackgroundResource(res);
0
Franklin CI

このコードを試してください:

Drawable thumb = ContextCompat.getDrawable(getActivity(), R.mipmap.cir_32);
mSeekBar.setThumb(thumb);
0
Ashwin H

ViewCompat.setBackground(yourView , drawableBackground)を試してみる

0
Umair Khalid