Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 更改背景是否也会更改线性布局的填充?_Android_Background_Padding_Android Linearlayout - Fatal编程技术网

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的某些项上