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