更改背景是否也会改变LinearLayout的填充?

我有以下LinearLayout 。 我不明白的是,如果我将背景设置为另一个图像,则重置填充信息。 有办法防止这种情况吗?

    

当我改变LinearLayout aPanel的背景可绘制时,我看到孩子的位置被移动了。

Solutions Collecting From Web of "更改背景是否也会改变LinearLayout的填充?"

这是在View上更改背景Drawable时的默认行为。 根据Android开发人员之一Romain Guy的说法,“设置图像重置填充的原因是因为9补丁图像可以编码填充。” 在类似的问题中查看他的完整答案。

修复方法是每次更改背景可绘制时重置代码中的填充。

这是一个类似的问题。

简而言之,答案是:

 public static void setViewBackgroundWithoutResettingPadding(final View v, final int backgroundResId) { final int paddingBottom = v.getPaddingBottom(), paddingLeft = v.getPaddingLeft(); final int paddingRight = v.getPaddingRight(), paddingTop = v.getPaddingTop(); v.setBackgroundResource(backgroundResId); v.setPadding(paddingLeft, paddingTop, paddingRight, paddingBottom); } 

重置填充的原因是因为drawable可能是9-patch drawable。

您可以使用shape来设置单色或图像的背景,并应用这样的填充: