7C00.ME/houmu 2013-07-22

setBackground设置背景导致padding失效

对View使用setBackground,可能导致其内边距padding丢失,这个现象不知道算不算是Android的一个bug。这种操作可能也比较少见,所以用中文没搜索出解决方法,换成英文搜索发现也有人遇到了相同的问题,见Stackoverflow上这篇文章

这种问题也不是一定会出现的。我的情况是设置的背景Drawable是用9-patch的图片构成了selector,主要影响因素应该是9-patch。Stackoverflow一位兄弟也遇到了这种情形。

解决办法是设置背景前备份padding值,设置背景之后在重设padding值。参看Stackoverflow上的代码实现,并作一定修改,代码如下:

public static void setBackgroundAndKeepPadding(View view,
		int backgroundResource) {
	int top = view.getPaddingTop();
	int left = view.getPaddingLeft();
	int right = view.getPaddingRight();
	int bottom = view.getPaddingBottom();
	view.setBackgroundResource(backgroundResource);
	view.setPadding(left, top, right, bottom);
}