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

发布于 2024-09-02 07:13:09 字数 498 浏览 5 评论 0原文

我有以下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

I have the following LinearLayout. What I don't understand is if I set the background to another image, the padding information are reset. Is there a way to prevent this?

<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>

I see the position of the children get shifted when I change the background drawable of the LinearLayout aPanel.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

青丝拂面 2024-09-09 07:13:09

这是更改 View 上的背景 Drawable 时的默认行为。 Android 开发者之一 Romain Guy 表示,“设置图像会重置填充的原因是因为 9 补丁图像可以对填充进行编码。”请参阅类似问题中的完整答案。

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

This is the default behavior when changing the background Drawable on a View. According to Romain Guy, one of the Android developers, "The reason why setting an image resets the padding is because 9-patch images can encode padding." See his full answer in a similar question.

The fix is to reset the padding in code each time you change the background drawable.

永不分离 2024-09-09 07:13:09

这是一个类似的问题。

简而言之,答案是:

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 补丁可绘制对象。

This is a similar question.

in short, the answer would be :

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);
}

The reason for the padding being reset is because the drawable might be a 9-patch drawable .

杀お生予夺 2024-09-09 07:13:09

您可以使用 shape 设置单色或图像背景并应用填充,如下所示:

<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>

You can use shape to set the background with single colour or image and apply padding like this:

<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>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文