【问题标题】:Does changing the background also change the padding of a LinearLayout?更改背景是否也会更改 LinearLayout 的填充?
【发布时间】:2011-02-22 14:08:42
【问题描述】:

我有以下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 的背景可绘制对象时,我看到孩子们的位置发生了变化。

【问题讨论】:

  • 你有什么证据表明“填充信息被重置”?换句话说,您的实际症状是什么?
  • stackoverflow.com/questions/5890379/… 相同的问题 - 在调用 setBackgroundResource() 后填充只会重置(可能仅与 9-patch 背景有关)。

标签: android background padding android-linearlayout


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    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。

    【讨论】:

    • 您还可以使用具有适当状态集的选择器设置背景。然后你不必恢复填充
    • @ArkadiuszCieśliński 当然。取决于情况和您的需求
    • @androiddeveloper 我必须向视图发布一个可运行的文件以使填充工作,为什么会发生这种情况?
    • @zero.zero.seven 我不记得有这样的问题。也许您应该发布它,并显示一些代码以提供有关原因的线索。也许最好创建一个小应用示例来展示您的问题。
    • @androiddeveloper 如果以下信息没有帮助,我将创建一个关于它的线程,我在 TextView 上执行以下操作:设置背景、设置文本、设置四边填充和设置字体;并且底部/右侧填充有时会变得讨厌,我尝试了可运行的,所以问题发生得更少!但它仍然存在于列表视图的某些项目中
    【解决方案3】:

    您可以使用 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-29
      • 2013-11-18
      • 1970-01-01
      • 1970-01-01
      • 2016-03-27
      • 2014-12-13
      • 2017-04-16
      • 2019-07-23
      相关资源
      最近更新 更多