Меняет ли изменение фона дополнение отступа LinearLayout? - PullRequest
23 голосов
/ 22 мая 2010

У меня есть следующее 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 Панели .

Ответы [ 3 ]

40 голосов
/ 06 мая 2012

Это стандартное поведение при изменении фона Drawable на View. По словам Ромена Гая, одного из разработчиков Android, «причина, по которой установка изображения сбрасывает отступы, заключается в том, что изображения с 9 патчами могут кодировать заполнение». Смотрите его полный ответ в подобном вопросе .

Исправление состоит в том, чтобы сбрасывать отступы в коде каждый раз, когда вы изменяете фон для рисования.

19 голосов
/ 17 февраля 2013

Этот является аналогичным вопросом.

короче говоря, ответ будет:

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 патчей.

3 голосов
/ 20 мая 2016

Вы можете использовать форму, чтобы установить фон с одним цветом или изображением и применить отступы как это:

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