Does changing the background also change the padding of a LinearLayout?

后端 未结 3 1579
刺人心
刺人心 2020-12-05 14:15

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

相关标签:
3条回答
  • 2020-12-05 14:44

    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.

    0 讨论(0)
  • 2020-12-05 14:49

    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>
    
    0 讨论(0)
  • 2020-12-05 14:53

    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 .

    0 讨论(0)
提交回复
热议问题