Android 查看支持保证金?

Android view support margin?

开发者指南中说

though a view can define a padding, it does not provide any support for margins. However, view groups provide such a support.

但为什么我可以在 ImageViewEditView 等中设置 layout_margin 属性,它们的存在和工作就像填充一样,

导游说的我听不懂,谁能帮我理解一下?

基本上这意味着边距在 xml 中为子视图定义,但由其父视图使用。

从技术上讲,填充是视图的字段 class。视图本身在 View.draw() 方法中使用了填充。参见:

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.0.2_r1/android/view/View.java#15156

边距是 MarginLayoutParams 的字段 class。 ViewGroup 使用边距来布局其子项。参见:

http://developer.android.com/reference/android/view/ViewGroup.MarginLayoutParams.html

编辑:

边距加载到 MarginLayoutParams,然后在布局阶段使用。

使用这些 xml 属性在 FrameLayout 中创建 MarginLayoutParams 的方法: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.0.2_r1/android/widget/FrameLayout.java#678

加载边距:http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.0.2_r1/android/view/ViewGroup.java#6619

布局:http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.0.2_r1/android/widget/LinearLayout.java#1539

视图 class 不包含页边距。它包含填充,因为填充偏移了视图的内容。边距是为了使视图本身与父视图组偏移。因此,边距包含在 ViewGroup class 中。 但是记住继承的原则。视图是 ViewGroup class 的子视图。因此,它继承了 ViewGroup 的属性,包括边距。因此,当您在视图上应用边距时,它会响应,因为它已经通过继承具有边距属性。