浅析Margin和Padding属性
来源:互联网 发布:办公软件教学视频 编辑:程序博客网 时间:2024/05/19 17:57
序
Magin:有边缘的意思,在Android布局中的使用方式是
android:layout_margin=“XXdp”,看到这个不免想到layout是父布局来控制子控件的。
而这个margin属性就是父控件来控制子控件的边缘位数状况的,俗称“外边距”。
Padding:是填充的意思,在Android布局中的使用方式是
android:padding=“XXdp”,这个就是子控件来控制自己的属性,拿TextView举例
这个是文字内容和控件边缘的距离,俗称“内边距”。
上图中除了红色框以内的区域,其他都是Padding填充的区域:
android:padding="16dp"
android:layout_width="200dp"
android:layout_height="wrap_content"
结论1:当宽高设置为wrap_content时,Padding会增加控件的宽高;
结论2:当宽高设置为精确的dp时,Padding会对控件的内容(这里是文字)有影响;
验证结论2:
android:padding="10dp"
android:layout_width="200dp"
android:layout_height="30dp"
如图:
1.Padding的基本使用
在XML中:
android:padding="XXdp"
android:paddingBottom="XXdp"
android:paddingLeft="XXdp"
android:paddingRight="XXdp"
android:paddingTop="XXdp"
android:paddingStart="xxdp"
android:paddingEnd="xxdp"
在JavaCode中
setPadding(left,top,right,bottom);
setPaddingRelative(start,top,end,bottom);
这里特别说明下Start和End属性:
这2个属性是在Api17(4.2)以后开始支持,为了支持RTL布局(Right-to-Left),
在我国的阅读方式是:从左到右,而国外有些国家是:从右到左的
如果是从左到右,start=left,end=right。反之,即在RTL布局中start=right,end=left;
TextView中的相关源码:
caseLAYOUT_DIRECTION_RTL:
mUserPaddingLeftInitial= padding.right;
mUserPaddingRightInitial= padding.left;
internalSetPadding(padding.right, padding.top, padding.left, padding.bottom);
break;
caseLAYOUT_DIRECTION_LTR:
default:
mUserPaddingLeftInitial= padding.left;
mUserPaddingRightInitial= padding.right;
internalSetPadding(padding.left, padding.top, padding.right, padding.bottom);
当然如果不用兼容国外的,你也可以完全不用这2个属性,不用在乎warning。
如果有强迫症的话,可以写上所有属性。注意start所对应的是left还是right。
android:paddingStart="16dp"
android:paddingEnd="0dp"
android:paddingLeft="16dp"
android:paddingRight="0dp"
2.Padding的注意事项
2.1.将Padding设置为负值无效:
我们知道padding为正值的时候,如果宽高为定值,会影响到文字内容。如果宽高为wrap_content,会影响到控件的宽高。
如果设置负值呢? 发现和“0dp”一样的效果。
在View的源码中发现:
mUserPaddingLeftInitial,
topPadding >=0? topPadding :mPaddingTop,
mUserPaddingRightInitial,
bottomPadding >=0? bottomPadding :mPaddingBottom);
if(isLayoutRtl()) {
mPaddingLeft= (mUserPaddingEnd>=0) ?mUserPaddingEnd:mUserPaddingLeftInitial;
mPaddingRight= (mUserPaddingStart>=0) ?mUserPaddingStart:mUserPaddingRightInitial;
}else{
mPaddingLeft= (mUserPaddingStart>=0) ?mUserPaddingStart:mUserPaddingLeftInitial;
mPaddingRight= (mUserPaddingEnd>=0) ?mUserPaddingEnd:mUserPaddingRightInitial;
}
从这些三目运算符,可以得知;如果这个值大于0,则给予这个值,否则结果为0
2.2.Padding设置在固定的宽高控件中需要注意文字显示区域的问题
如结论2的效果
2.3.Padding是否可以和PaddingLeft等“小弟”一起使用
可以,当Padding存在的时候,PaddingLeft等“小弟”统统无效。
3.Magin的基本使用
在XML中
android:layout_margin="xxdp"
android:layout_marginBottom="xxdp"
android:layout_marginTop="xxdp"
android:layout_marginLeft="xxdp"
android:layout_marginRight="xxdp"
android:layout_marginEnd="xxdp"
android:layout_marginStart="xxdp"
在JavaCode中
由于margin属性是由其父控件,所以需要从父控件获得它的LayoutParams.
ViewGroup.MarginLayoutParams marginLayoutParams= (ViewGroup.MarginLayoutParams)tv.getLayoutParams();
marginLayoutParams.topMargin+=100;
tv.requestLayout();
4.Margin的注意事项
4.1.Margin可以设置为负值:
如果是marginleft设置负值,他就相当于设置marginright为正值。
android:layout_marginLeft="100dp"
android:layout_marginLeft="-100dp"
Margin可以设置负值,可以利用这一个特性来实现ListView的侧滑删除等效果。
4.2.Margin是否可以和MarginLeft等“小弟”一起使用?
可以一起使用,当Margin属性存在的时候,MarginLeft等“小弟”通通无效。
- 浅析Margin和Padding属性
- Android margin 和 padding 属性
- margin和padding属性特点
- Android 的Margin和Padding属性
- css的padding和margin属性
- Android 的Margin和Padding Layout_weight属性
- Android 的Margin和Padding属性
- android布局之margin和padding属性
- CSS padding margin border属性和布局
- padding和margin的区别及其属性
- 属性padding和margin的区别
- padding 与 margin 属性
- 盒子模型里面的margin属性和padding属性杂记
- Padding和Margin
- padding和margin
- Padding和Margin
- padding和margin
- html padding 和 margin
- javascript一些有关date操作的方法
- BZOJ3834: [Poi2014]Solar Panels
- Number of Islands II
- java的aes——base64加解密
- 20家上市银行的不良资产总额超过1亿卢比
- 浅析Margin和Padding属性
- SQLAlchemy 学习笔记
- Linux—档案与目录管理(1)
- 2016-5-13-2
- 画饼状图二
- db2创建表空间
- JavaWeb开发之HttpServletResponse接口和常用方法 (跟着龙哥学JavaWeb)
- Beautiful Soup 4库--python2.x(学习日记)
- 论Android应用进程长存的可行性