如下图所示:
黄色部分表示 padding, 灰色部分为margin;通俗的理解为:padding为控件内边距,margin为控件外边距
以下图片为正常情况视觉效果以及手机开启【显示布局边界】后得到的效果如下所示:
以上图片的布局文件为:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:background="#aaffcc"
android:layout_margin="20dp"❶
android:padding="20dp"❷
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:background="#ccdd00"
android:padding="20dp"❸
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:background="#ff0000"
android:layout_margin="40dp"❹
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>
</FrameLayout>
</LinearLayout>
通过XML和截图分析验证了上诉结论的正确性,并且由❸、❹可知,父容器的padding不能和子控件的margin相互抵消,考虑更深一点,自定义View的时候,View的measure过程需要考虑父容器LayoutParams的padding和自身LayoutParams的margin.