我有的是:
表现:
<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中非常不同)开发多版本可怕
| 归档时间: |
|
| 查看次数: |
16587 次 |
| 最近记录: |