`
renyuan_1991
  • 浏览: 69423 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

setBackgroundResource导致Padding失效,settextsize

阅读更多
通过setBackground设置9 patch图的时候会重置padding。这个时候需要在setBackground之前调用getPadding方法获取未重置之前的padding,然后在调用setBackground之后用代码重新设置Padding。
    /**
     * 代码中设置background后会导致padding失效
     * @param rl
     */
    private void setRlPadding(RelativeLayout rl) {
        int top = rl.getPaddingTop();
        int bottom = rl.getPaddingBottom();
        int left = rl.getPaddingLeft();
        int right = rl.getPaddingRight();
        rl.setBackgroundResource(R.drawable.hive_journey_bg);
        rl.setPadding(left,top,right,bottom);
    }

只有在背景图是.9的时候会出现这种情况,其他时候并没有遇到。

还有一个小细节在这里顺便记录一下,很多同学发现通过TextView的setTextSize方法设置的字体大小总是跟自己想的不一样。原因是settextSize的单位默认是dp,这个时候最先想到的做法就是直接setTextSize(10)这样写死,可是这样对与整个应用通用字体的配置造成麻烦,如果有天要改字体大小,这个textview很容易就漏掉。所以我们想把这个字体的size也放到配置文件里面,于是我们就要调用这个方法
titleTv.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.hive_textsize_1));

这个方法的第一个参数是规定这个size的类型,如dp或者px。关键在于第二个参数,通过
getResources().getDimension(R.dimen.hive_textsize_1)

这个方法拿到的尺寸其实就是系统转换好的,如果我们在配置文件中是这样写的
<dimen name="hive_textsize_1">16sp</dimen>
。那么通过getResources方法得到的大小就是根据屏幕密度换算后的,所以要想字体显示正常就必须设置size的类型是px。当然如果们定义的单位是px,这里自然就不会转换。
0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics