setBackgroundResource设置背景导致padding错误

  1.问题产生:

      在项目中发现的bug,程序中为textview设置好padding和background背景图片后,在程序中需要动态的修改background图片。

   layout文件如下:

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:id="@+id/container"
              android:orientation="vertical"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:gravity="right"
        >
    <TextView
            android:id="@+id/text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:paddingLeft="12dp"
            android:paddingRight="12dp"
            android:text="Hello World, MyActivity"
            android:background="@drawable/tip_left"
            />
</LinearLayout>

     在程序中动态修改textview的背景图:如下

        TextView textView = (TextView)findViewById(R.id.text);
        textView.setBackgroundResource(R.drawable.tip_right);

     未修改背景和修改后的背景效果分别如下:

     

      从两图中的区别可以看到修改后padding没了。这貌似是个bug。

   2.修复bug

      经过google查找资料如下
      在Layout中指定好background和padding以后,程序里面动态修改background之后padding就失效了,我们需要在修改background之后重新设置一下padding。
      
        TextView textView = (TextView)findViewById(R.id.text);
        int left = textView.getPaddingLeft();
        int top = textView.getPaddingTop();
        int right = textView.getPaddingRight();
        int bottom = textView.getPaddingBottom();
        textView.setBackgroundResource(R.drawable.tip_right);
        textView.setPadding(left, top, right, bottom);
      经过上面的重新设置padding以后,发现textView中的padding恢复正常。

   3.备注

    1. setPadding()要在setBackgroundResource()之后调用,否则你会发现padding还是失效的。
   2. setPadding()中需要重新设置左上右下四个值,否则你会发现只有你设置的值的对的,其他未设置的值还是错的。
      
       本人就是只用到了paddingLeft和paddingRight,于是只在setPadding函数中设置paddingLeft和paddingRight,其他的设为0,发现只有左右是正常的,上下还是错的。
       还以为是gravity也失效了呢。。囧
       
    先记录下来,希望看到的人少走弯路~~


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值