1.gravity与layout_gravity
android:gravity:
用于设置该控件中内容相对于该控件的对齐方式(可以不考虑当前布局的方向)
android:layout_gravity:
用于设置该控件相对于父控件的对齐方式(需要考虑当前布局的方向)
PS:如果当前线性布局的方向为垂直方向,那么layout_gravity中使用的对齐方式,只能是水平位置对齐 (left,right,center_horizontal);
如果是水平方向,只能是垂直位置对齐(top,bottom,center_vertical)
可以同时使用多种对齐方式,用“|”分隔
2.padding与margin边距
padding:
用于设置该控件中内容相对于该控件的边距,即内边距。
margin:
用于设置该控件相对于控件的边距,即外边距。
如图所示:
3.weight
layout_weight的值用于在线性布局中指定父控件剩余空间的分配比例。只限于在线性布局中使用
(1).初始
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:background="#00ffff">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Frist"
android:background="#ff00ff"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Sceond"
android:background="#0000ff"/>
</LinearLayout>
效果如图:
淡蓝色部分为父控件的剩余空间
(2).layout_weight已经设置,但是layout_width并未设置为0dp
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:background="#00ffff">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Frist"
android:background="#ff00ff"
android:layout_weight="1"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Sceond"
android:background="#0000ff"
android:layout_weight="1"/>
</LinearLayout>
效果如下:
被设置weight值得空间,宽度应为该控件的原宽度+父控件的剩余空间比例*
所以,此时Frist控件的宽度应该是小于Second控件的宽度。
(3)layout_width设置成0dp,再设置layout_weight
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:background="#00ffff">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Frist"
android:background="#ff00ff"
android:layout_weight="1"/>
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Sceond"
android:background="#0000ff"
android:layout_weight="2"/>
</LinearLayout>
效果如下:
水平方向的LinearLayout中:使用weight时,需注意将宽度设置为0dp
垂直方向的LinearLayout中:使用weight时,需注意将高度设置为0dp
根据公式,这样的控件就能根据比例等分父控件的宽或高
(4)如果将layout_width设置成math_parent呢
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:background="#00ffff">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Frist"
android:background="#ff00ff"
android:layout_weight="1"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Sceond"
android:background="#0000ff"
android:layout_weight="2"/>
</LinearLayout>
效果如图:
为什么会这样呢,根据公式计算:
Frist的宽度:match_parent(原宽度)+[match_parent-(match_parent+match_parent)]*1/3
设match_parent为a,则:
Frist的宽度:a+[a-(a+a)]*1/3=2/3a
Frist的宽度为父控件的2/3,即父控件的2/3份
Second宽度:a+(a-2a)*2/3=1/3a
即为父控件的1/3份