加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 09:18:59 所属栏目:百科 来源:网络整理
导读:大家都知道,设置view的背景有两种方法,分别是XML中设置,代码中设置。 奇怪的是我在xml中设置背景时,显示的是图中右边的效果,而在代码中设置的却成了左图的效果(忽略颜色)。 xml中设置背景时这么写的: android:background="@drawable/keyword_bg" 在

大家都知道,设置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设置的背景尺寸不一的问题。

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读