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

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

    

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

  • 如何定位径向渐变背景
  • 设置textView的边框和背景颜色
  • Android ListView状态列表未显示默认项目背景
  • 如何设置android应用程序的背景?
  • 在onPause之后,PhoneGap继续在Android上运行
  • 慢动作与背景图像
  • 如何用动态数据实时更新Android ListView?
  • EditText背景基线颜色根据其在android中的焦点而变化
  • 这是在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来设置单色或图像的背景,并应用这样的填充: