如何为Android API 10-18视图设置位图背景?

10 versioning android view

我有的是:

表现:

<uses-sdk
    android:minSdkVersion="10"
    android:targetSdkVersion="18" />
Run Code Online (Sandbox Code Playgroud)

资源:

View view = createViewFromWhatever();
Bitmap bitmap = loadSomethingAddMore();
Run Code Online (Sandbox Code Playgroud)

我搜索到的任何地方都是接受的,建议:

view.setBackgroundDrawable(new BitmapDrawable(bitmap));
Run Code Online (Sandbox Code Playgroud)

但它在API 18中已弃用.我对操作系统级别的框架错误和错过文档感到恐惧.我想要尊重他们所说的话,并且在遇到崩溃的情况下"这不是我的错"

我甚new BitmapDrawable(bitmap)至无法使用,而我需要new BitmapDrawable(getActivity().getResources(), bitmap).如果我将方法更改为推荐方式:setBackground(new BitmapDrawable(getActivity().getResources(), bitmap));

它会将消息标记为错误:

调用需要API级别16(当前最小值为10):android.widget.RelativeLayout #setBackground

作为一个解决方案,我可以检查运行用户的版本是什么,并执行if-else,而不是我将拥有代码 if(isAndroidVersion10()) else if () ...

任何解决方案可接受

如果我通过反射逃避弃用警告,我仍然有责任在崩溃的情况下,因为我已经使用不推荐的方法释放代码! - 我打电话的方式是不同的.

如果我忽略了Lint,那么它会在低版本的api中崩溃,进行测试.

Ofc我想支持API 10,所以不能从这里接受大部分答案

小智 20

它很快,从这里得到一个可接受的解决方案

        if (android.os.Build.VERSION.SDK_INT >= 16){
            setBackgroundV16Plus(mRootView, bitmap);
        }
        else{
            setBackgroundV16Minus(mRootView, bitmap);
        }



@TargetApi(16)
private void setBackgroundV16Plus(View view, Bitmap bitmap) {
    view.setBackground(new BitmapDrawable(getActivity().getResources(), bitmap));

}

@SuppressWarnings("deprecation")
private void setBackgroundV16Minus(View view, Bitmap bitmap) {  
    view.setBackgroundDrawable(new BitmapDrawable(bitmap));
}
Run Code Online (Sandbox Code Playgroud)

男人...一个简单的setBackground()......

谷歌开始从iOS复制非工作的东西(旋转,pushModal在4.3,5,6中非常不同)开发多版本可怕