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()中需要重新设置左上右下四个值,否则你会发现只有你设置的值的对的,其他未设置的值还是错的。
还以为是gravity也失效了呢。。囧
先记录下来,希望看到的人少走弯路~~