XML设置View的背景和代码中通过setBackground设置的背景尺寸不一

前端之家收集整理的这篇文章主要介绍了XML设置View的背景和代码中通过setBackground设置的背景尺寸不一前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

大家都知道,设置view的背景有两种方法,分别是XML中设置,代码中设置。


奇怪的是我在xml中设置背景时,显示的是图中右边的效果,而在代码中设置的却成了左图的效果(忽略颜色)。



xml中设置背景时这么写的:

android:background="@drawable/keyword_bg"
代码中设置时是这么写的:

//mKeyWordBackground是bitmap
mKeyWordBackground = BitmapFactory.decodeResource(getResources(),R.drawable.keyword_bg);
//转化成Drawable
Drawable b = new BitmapDrawable(mKeyWordBackground);
//mKeyOne是View组件
mKeyOne.setBackgroundDrawable(b);
用的是同一张背景图片keyword_bg,而出来的效果确实是左图的。可能这里大家看起来觉得很奇怪为什么不直接用setBackgroundResource把背景图设置好就完事,确实这里我这么做大家看来确实是多此一举,这里原本是有一段背景图片的处理逻辑,需要在背景图片上加点东西然后最后生成的Drawble才能作为背景,为了简洁地把问题反映出来,我把处理逻辑都去掉了。


代码中的实验过程(为了不产生和代码中的冲突,先把xml中的setbackground语句去掉):

1、mKeyOne.setBackgroundResource(R.drawable.keyword_bg)显示效果正常。但是这种办法不适合,我要在代码中动态改变背景图的需求。

2、mKeyOne.setBackgroundDrawable(getResources().getDrawable(R.drawable.keyword_bg))效果显示正常,这个就有点像我的需求了getResources().getDrawable(R.drawable.keyword_bg)返回的是一个Drawble。可是为什么我把背景图片处理完之后转成Drawble却不行呢?后来跟同事一起百度了一下找到了问题所在,

把Bitmap转成Drawble的语句

从Drawable drawable = new BitmapDrawable(mKeyWordBackground) ;

换成了Drawable drawable = new BitmapDrawable(getResources(),mColorBitmap) ;

显示就正常了如下图(忽略颜色不同的问题)


看了下源码和别人写的博客发现点击打开链接

BitmapDrawable(Resources res,Bitmap bitmap);

BitmapDrawable(Bitmap bitmap);

后来换上去的构造方法比原本我使用的那个构造方法多了一条设置Density的语句。

mBitmapState.mTargetDensity = mTargetDensity;

它会根据运行机器的Density来设置,如果使用BitmapDrawable(Bitmap bitmap);这个构造方法那么他就会使用默认的Density 160来设置,所以才会导致XML设置View的背景和代码中通过setBackground设置的背景尺寸不一的问题。

。。如有更好的建议,或者哪里说错了,希望大家能多多提点。

原文链接:https://www.f2er.com/xml/297283.html

猜你在找的XML相关文章