我有以下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 的背景可绘制时,我看到孩子们的位置发生了偏移。
答案 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++) {...}