Android初学者:填充(Padding)和外边距(Margin)的区别

55

我在SO上提出了问题,也查看了一个答案:

内边距是边框和实际视图内容之间的空间。请注意,内边距完全围绕着内容:顶部、底部、右侧和左侧都有内边距(可以独立设置)。

外边距是边框与相邻视图元素之间的空间。在图片中,外边距是整个对象外部的灰色区域。请注意,与内边距一样,外边距完全围绕着内容:顶部、底部、右侧和左侧都有外边距。

此外,更多关于内边距和外边距的信息来自:
http://developer.android.com/reference/android/view/View.html
http://developer.android.com/reference/android/view/ViewGroup.MarginLayoutParams.html

但是,在内边距和外边距之间的根本差异是什么呢?行为会因操作系统和设备而异吗?
我有一个普通的、简单的布局。代码没有问题,已经使用布局文件夹-layout和layout-sw600dp以及drawables-4dpi。无法制作没有内边距或外边距的布局,哪个更合适?


6
内边距是元素内部的间距,而外边距是元素外部的间距。就这些。我想您是在提到新操作系统主题引入的额外内边距吧?您可以分配一个不同的主题和/或使用负内边距来解决这个问题。 - Phantômaxx
2
扩展@ArtooDetoo的评论,请查看此答案,它将消除您所有的疑虑https://dev59.com/x2445IYBdhLWcg3w7urD#4619943 - Rohan Kandwal
9个回答

74

Margin

边距指的是元素之间的垂直和水平区域。如果元素周围没有边距,它们会紧贴在一起。换句话说,元素外部或之间的空间就构成了边距区域。

Margin

Padding

元素的内边距是设置在目标元素内容区域周围的水平和垂直空间。因此,填充在盒子内部而不是外部。

enter image description here


1
+1 为图片解决方案。 - Manmohan Badaya
@Kashif 感谢您提供的图解方案,我也已经查看了https://dev59.com/x2445IYBdhLWcg3w7urD - user3341441

47

Padding是用于组件内部。例如:TextViewButtonEditText等。
例如:文本和边框之间的空格。

Margin应用于组件的外部。
例如:屏幕左侧边缘与组件边框之间的空格。

视图padding和margin的区别中可以看到视觉表示很好。

在使用Padding时,我已经在2.2、2.3和4.3、4.4上看到了差异
在这种情况下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:text="ASDFGHJKL" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingLeft="15dp"
        android:text="@string/hello_world" />

</RelativeLayout>  

此外,请检查 dimens 的使用:
http://developer.android.com/guide/topics/resources/more-resources.html


谢谢,我会使用dimen,之前没有接触过。我看到在os 2.3、4.0和4.3的相对布局示例中差别很大!我已经看到了你提到的链接。 - user3341441

29

简单来说,如果您想将类似TextView、EditText的小部件与其他部件分开,应该使用顶部、右侧、左侧和底部的边距。

增加填充会增加内部间距,而不会使小部件远离其他部件。

图片描述

以按钮为例,特征按钮背景图像包括填充,但不包括边距。换句话说,添加更多填充会使按钮在视觉上变大,而添加更多边距只会使按钮与下一个控件之间的间隔更宽。


25

边距:指位于边框和其父容器之间的空白区域

内边距:指位于内容和边框之间的空白区域

请参考这里。

输入图像描述


谢谢,是的我在https://dev59.com/x2445IYBdhLWcg3w7urD上看到了这个。 - user3341441

2
+Nick Butcher在Udacity的视频中清楚地解释了外边距和内边距之间的区别及其使用情况。以下是摘录:

...如果你想要扩大对象的可触摸区域或背景,则使用填充;否则,请使用外边距...


1

什么是内边距(padding)和外边距(margin)之间的根本区别?

关于区别- Rohan Khandwal分享了一个非常完美的链接。

操作系统和设备会影响行为吗?

如果我们谈论拥有不同边距和内边距视图的行为,那么在不同分辨率的不同设备上它们肯定会呈现不同的样式。 这就是为什么我们提供不同的dimen/values/layout文件夹,它们具有自己的含义。


谢谢,是的,那就是我想知道的。我检查了@user2450263的答案中的示例,填充差异在2.3和4.3以及4.0中非常显著! - user3341441
是的,那也是有用的链接。 - Sagar Shah

0

Padding是指边框内部的空间,位于边框和实际视图内容之间。请注意,padding完全围绕着内容:顶部、底部、右侧和左侧都有padding(可以独立设置)。

Margin是指边框外部的空间,位于边框和相邻视图元素之间。在图像中,margin是整个对象外部的灰色区域。请注意,与padding一样,margin也完全围绕着内容:顶部、底部、右侧和左侧都有margin。

Padding会增加视图的大小,而margin不会,因为它在视图外部。


0
Android的margin和padding之间的区别在于,即使文本距离边缘有多少sp,margin也不会留出空间或颜色。它只是文本和你设置的所有颜色“独自”存在。然而,在padding中,文本与屏幕边缘的距离与margin相同,但在padding中,文本远离屏幕边缘,文本和屏幕边缘之间的所有空间都填充了你选择的颜色或任何文本首选项。这就是Android margin和padding之间的区别。

0

视图的左侧、顶部、右侧和底部的填充以像素为单位表示。填充可以用来将视图的内容偏移特定数量的像素。

例如,左填充为2会将视图的内容推到左边缘的右侧2个像素。

填充可以使用setPadding(int, int, int, int)方法设置并通过调用getPaddingLeft()getPaddingTop()getPaddingRight()getPaddingBottom()查询。

边距是边框外部与此视图旁边的其他元素之间的空间。 请注意,像填充一样,边距完全围绕着内容:上、下、右、左四面都有边距。 边距可以使用setMargins(int left, int top, int right, int bottom)方法设置。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接