回答:
廃止予定ですが、引き続き機能するため、そのまま使用できます。しかし、完全を期すために、完全に正確になりたい場合は、次のようにします。
int sdk = android.os.Build.VERSION.SDK_INT;
if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) {
setBackgroundDrawable();
} else {
setBackground();
}
これを機能させるには、buildTarget api 16を設定し、最小ビルドを7または同様のものに設定する必要があります。
android:minSdkVersion="7" android:targetSdkVersion="17"
、setBackground()がエラーとして表示されます:呼び出しにはAPIレベル16(現在の最小値は7)が必要です
@TargetApi(Build.VERSION_CODES.JELLY_BEAN) @SuppressWarnings("deprecation") private static void setBg(RelativeLayout layout, BitmapDrawable TileMe) { if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN) { layout.setBackgroundDrawable(TileMe); } else { layout.setBackground(TileMe); } }
setBackgroundResource()
APIレベル1の代わりに使用できます。
setBackgroundResource(int)
リソースIDを受け入れるため、背景を設定するために毎回ビューを膨らませる必要があります。Drawableがすでに拡張されていると仮定すると、このような動作は望みません。何か不足していますか?
現在、ソースコードに示されているように、2つの関数に違いはないようです(この投稿のクレジット)。
public void setBackground(Drawable background) {
//noinspection deprecation
setBackgroundDrawable(background);
}
@Deprecated
public void setBackgroundDrawable(Drawable background) { ... }
したがって、これは単なる名前の決定であり、fill-parentとmatch-parentの場合と同様です。
私はこれが古い質問であることを知っていますが、同様の状況にあり、私の解決策は
button.setBackgroundResource( R.drawable.ic_button );
Drawable d = button.getBackground();
次に、「Drawable」で遊んだり、カラーフィルターを適用したりできます。
これで、これらのオプションのいずれかを使用できます。そして、それはどんな場合でも機能するでしょう。あなたの色は次のようなHEXコードにすることができます:
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);
それが役に立てば幸い!
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);
}
これは私にとってはうまくいきます:ビュービューはあなたのeditText、スピナーなどです。そして、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));
}
}
私もこの問題を抱えていましたが、ImageViewを使用して回避策を作りました。
RelativeLayoutを使用して、その中にImageViewを追加してみてください(幅と高さ:fill_parent、scaleType:center)。
また、imageviewがRelativeLayout内の最初の要素であることを確認してください。これにより、背景として機能します。
if
単なる条項にすぎなかったはずです。正解をご覧ください。
これを行うこともできます:
try {
myView.getClass().getMethod(android.os.Build.VERSION.SDK_INT >= 16 ? "setBackground" : "setBackgroundDrawable", Drawable.class).invoke(myView, myBackgroundDrawable);
} catch (Exception ex) {
// do nothing
}
編集:@BlazejCzappで指摘されているように、リフレクションなしで問題を解決できる場合は、リフレクションの使用を回避することをお勧めします。リフレクションなしでは解決できないユースケースがありましたが、それは上記のケースではありません。詳細については、http://docs.oracle.com/javase/tutorial/reflect/index.htmlをご覧ください。