前几天写了篇android控件属性padding ,我想我应该紧接着写篇android控件属性margin,为什么呢?因为对刚开始学习android的人来说,总是搞不清它们之间有什么区别。以前它也困扰了我很久。但写这篇文章的时候,已经过了好几天了,怪自己这几天松懈了。
老规矩,使用Android studio创建一个项目,打开布局文件,将根布局修改为一个水平方向的LinearLayout,添加两个Button。运行项目看效果。
给button1按钮设置layout_marginLeft为100dp,运行效果如下:
可以看出button1、button2一起向左平移了100dp,接着给buton2设置layout_marginLeft为100dp,运行效果如下:
我们可以看到button2距离button1的为100dp,但是button2已经变形,那是因为button2设置的宽高都为wrap_content,
button2要满足距button1的距离为100dp,它只有压缩自己,让自己变高,变窄,才能显示自己和距button1的距离为100dp,当再增大marginLeft的值时,会发现button2会被挤的显示不全或者不显示了,因为button2要满足marginLeft值,它只有不停的压缩自己,直到不显示为止。
显示不全的情况如下:
(1)给button1设置marginLeft为100dp,给button2设置marginLeft为100dp的情况
(2)给button1设置marginLeft为145dp,设置marginRight为145dp的情况
PS:我的模拟器的屏幕分辨率为320*480
总结:
1)margin值,既可以相对于父控件,又可以相对于相邻控件;
2)给View设置Margin值,如果View没有相邻的控件时,则它的Margin值是相对于父控件;
3)给View设置Margin值,如果View有相邻的控件时,它的margin值是相对于相邻控件;
4)为了满足给View设置的Margin,View会压缩自己,达到用户设置的效果,直到将自己压缩至看不见;
5)当marginLeft、marginRight、marginTop、marginBottom设置的值相同时,可以使用margin一个属性代替;
以前错误的认识:
当没有做测试前,总认为,当Margin值设置的值大于设备屏幕时,控件会出现在屏幕外面,但它完整存在,并不会压缩自己。然而,自己也没有想左右(上下)设置的margin值大于等于屏幕的宽(高)的一半时的情况。