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

时间:2010-05-21 23:02:52

标签: android background padding android-linearlayout

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

<LinearLayout android:id="@+id/aPanel"
    android:orientation="horizontal" android:layout_width="fill_parent"
    android:layout_height="wrap_content" android:background="@drawable/bkground"
    android:paddingLeft="15dp" android:paddingRight="15dp"> 

     <!-- some children here -->
     </LinearLayout>

当我更改LinearLayout aPanel 的背景可绘制时,我看到孩子们的位置发生了偏移。

3 个答案:

答案 0 :(得分:39)

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

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

答案 1 :(得分:19)

This是一个类似的问题。

总之,答案是:

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。

答案 2 :(得分:3)

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

 int lastheight;
 for ( lastheight = 0 ; lastheight < height ; lastheight++)  {...}