Изменяет ли фон фон также изменение прокладки LinearLayout?
У меня есть следующий LinearLayout
. Я не понимаю, что если я установил фон на другое изображение, информация о дополнении будет reset. Есть ли способ предотвратить это?
<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.
Ответы
Ответ 1
Это поведение по умолчанию при изменении фона Drawable
на View
. По словам Ромена Гая, одного из разработчиков Android: "Причина, почему настройка изображения сбрасывает заполнение, состоит в том, что изображения с 9 патчами могут кодировать отступы". Посмотрите его полный ответ в аналогичном вопросе.
Исправление составляет reset отступы в коде при каждом изменении фонового рисунка.
Ответ 2
Этот вопрос является аналогичным.
Короче говоря, ответ будет следующим:
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);
}
Причиной для прокладки reset является то, что выталкиваемый может быть доступен для 9 патчей.
Ответ 3
Вы можете использовать форму, чтобы установить фон с одним цветом или изображением и применить дополнение следующим образом:
<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>