Android 更改背景是否也会更改线性布局的填充?
我有以下Android 更改背景是否也会更改线性布局的填充?,android,background,padding,android-linearlayout,Android,Background,Padding,Android Linearlayout,我有以下线性布局。我不明白的是,如果我将背景设置为另一幅图像,填充信息就会重置。有没有办法防止这种情况 <LinearLayout android:id="@+id/aPanel" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/bkground"
线性布局
。我不明白的是,如果我将背景设置为另一幅图像,填充信息就会重置。有没有办法防止这种情况
<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的背景可绘制时,我看到子对象的位置发生了移动。这是在视图上更改背景可绘制时的默认行为。Android开发人员之一Romain Guy表示,“设置图像重置填充的原因是9-patch图像可以对填充进行编码。”
解决方法是每次更改背景绘图时重置代码中的填充。是一个类似的问题
简言之,答案是:
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);
}
重置填充的原因是因为可绘制的可能是9块可绘制的。您可以使用形状设置单色或图像背景,并按如下方式应用填充:
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#FFFFFF"/>
<corners
android:bottomLeftRadius="8dip"
android:topLeftRadius="8dip"/>
<padding
android:bottom="0dip"
android:left="0dip"
android:right="0dip"
android:top="0dip"/>
</shape>
您有什么证据证明“填充信息已重置”?换句话说,您的实际症状是什么?与此问题相同-在调用setBackgroundResource()后,填充将被重置(可能仅与9-patch背景相关)。您还可以使用具有适当状态集的选择器设置背景。那你就不必恢复了paddings@ArkadiuszCie当然可以。视情况和您的个人情况而定needs@androiddeveloper我不得不在视图中发布一个runnable,以使填充工作正常,为什么会发生这种情况?@zero.zero.seven我不记得有这样的问题。也许你应该发布相关信息,并展示一些代码来提供有关原因的线索。也许最好创建一个小应用程序示例来显示您的问题。@androiddeveloper如果以下信息没有帮助,我将创建一个关于它的线程,我在TextView上执行以下操作:设置回退、设置文本、设置四边填充和设置字体;底部/右侧的填充有时会变得很糟糕,我尝试了runnable,所以问题发生得更少!但它仍然存在于listview的某些项上