五大布局:LinearLayout、RelativeLayout、TableLayout、FrameLayout、AbsoluteLayout
继承结构:
java.lang.Object
android.view.View
android.view.ViewGroup
android.widget.LinearLayout
LinearLayout:线性布局,特点:在其布局中的控件呈线性排列,默认排列顺序为Vertical(垂直),可以设置为horizontal(水平)方向,
<LinearLayout
android:layout_width="match_parent" --------------指定布局的宽度,①match_parent:跟父类的宽度一样,这里代表整个屏幕的宽度
②wrap_content:包含里面所放内容的大小
android:layout_height="match_parent" ---------------指定布局的高度,跟上一样
android:orientation="vertical" ---------------指定布局中的子节点以什么顺序排列 ①vertical:垂直排列
②horizatntal:水平排列
android:background="@android/color/..." -------------设置布局中的背景颜色
....(通过)继承结构,很多属性都是通用的,跟控件类似,具体查看API
>
<Button
...
/>
</LinearLayout>
重点属性:
①android:layout:gravity跟android:gravity的区别
android:layout:gravity:是代表控件在父结点中的位置
android:gravity:代码文本内容在控件中的位置
android:layout:gravity
效果图:
可以得知,在horizontal(水平)中,只能设置top、certer_vertical、bottom三个属性,相反,在vertical(垂直)中,只能设置left、certer_horizontal、right三个属性。
android:gravity
②android:layout_weight 权重属性(重点)
首先看下面一个例子
例一
效果如下
解析:按vertical垂直排列顺序,权重分别为:1、1、1,所以三个平分垂直界面,在看如下例子:
例二
效果图如下
解析:Button3并没有设置权重,Button1和Button2的权重分别为1、1,权重的算法是①先将没有权重属性的控件分配空间,②剩下的在按权重分配,所以效果图就成这样了
例三:
效果图
解析:答案并没有像你们想象的那样,按1:2:3分配,为什么呢? 原因如下:看清属性,三个Button按钮的竖直高度都是match_parent,所以,每个Button都占满了一个屏幕,
①1+1+1=3(总共占了三个屏幕的大小);1-3=-2(本身只有一块屏幕,所需要的却是3块屏幕的大小,相减也就是剩余-2块屏幕的空间大小)
②剩余的大小来按权重分配:
Button1:1+(-2 * (1/6)) =2/3;意思是:( 原本的大小1)+ 剩余屏幕大小的所占的空间大小 = Button1实际占的大小
Button2:1+(-2 *(2/6))=1/3;意思跟上类似
Button3:1+(-2*(3/6))=0;
③所以效果图就上如上所示,如果还不清楚,看第一个例子,权重为1、1、1的例子,其实原理还是以上所讲,只不过一个剩余的屏幕空间为正数,一个剩余的屏幕空间为负数,差别仅此而已。
总结:
① 先分配完没有设置权重属性空间的所占空间
②在分配设置有权重属性控件的所占空间,算法如上所示。
到此:LinearLayout(线性)布局 讲解完毕,很多属性没有细讲,用到的时候在查看API文档。
继承结构:
java.lang.Object
android.view.View
android.view.ViewGroup
android.widget.LinearLayout
LinearLayout:线性布局,特点:在其布局中的控件呈线性排列,默认排列顺序为Vertical(垂直),可以设置为horizontal(水平)方向,
<LinearLayout
android:layout_width="match_parent" --------------指定布局的宽度,①match_parent:跟父类的宽度一样,这里代表整个屏幕的宽度
②wrap_content:包含里面所放内容的大小
android:layout_height="match_parent" ---------------指定布局的高度,跟上一样
android:orientation="vertical" ---------------指定布局中的子节点以什么顺序排列 ①vertical:垂直排列
②horizatntal:水平排列
android:background="@android/color/..." -------------设置布局中的背景颜色
....(通过)继承结构,很多属性都是通用的,跟控件类似,具体查看API
>
<Button
...
/>
</LinearLayout>
重点属性:
①android:layout:gravity跟android:gravity的区别
android:layout:gravity:是代表控件在父结点中的位置
android:gravity:代码文本内容在控件中的位置
android:layout:gravity
![图片](https://i-blog.csdnimg.cn/blog_migrate/ec6e28c7221c0320839523e5bf555d5b.png)
效果图:
![图片](https://i-blog.csdnimg.cn/blog_migrate/86ec07687fea8fdef5d7b9cb52535f69.png)
可以得知,在horizontal(水平)中,只能设置top、certer_vertical、bottom三个属性,相反,在vertical(垂直)中,只能设置left、certer_horizontal、right三个属性。
android:gravity
![图片](https://i-blog.csdnimg.cn/blog_migrate/729478cdb2ad2d3fea9b219d39ba79f4.png)
![图片](https://i-blog.csdnimg.cn/blog_migrate/7c536fa3a6320b46e404aac74fe921ae.png)
②android:layout_weight 权重属性(重点)
首先看下面一个例子
例一
![图片](https://i-blog.csdnimg.cn/blog_migrate/b71ec57c26884fb85b1d8c46a46986f2.png)
效果如下
![图片](https://i-blog.csdnimg.cn/blog_migrate/1e6c30584c48751c52fba03aee21e3da.png)
解析:按vertical垂直排列顺序,权重分别为:1、1、1,所以三个平分垂直界面,在看如下例子:
例二
![图片](https://i-blog.csdnimg.cn/blog_migrate/6cc0dc3d4c849cf2ccc1fe981a176bf6.png)
效果图如下
![图片](https://i-blog.csdnimg.cn/blog_migrate/78615863ce6b6864772375d6b7c53e18.png)
解析:Button3并没有设置权重,Button1和Button2的权重分别为1、1,权重的算法是①先将没有权重属性的控件分配空间,②剩下的在按权重分配,所以效果图就成这样了
例三:
![图片](https://i-blog.csdnimg.cn/blog_migrate/6e76c7bb5aa29e1841f01eb308eb82d7.png)
效果图
![图片](https://i-blog.csdnimg.cn/blog_migrate/9714486d519f0cfc2af84e1166e6adc0.png)
解析:答案并没有像你们想象的那样,按1:2:3分配,为什么呢? 原因如下:看清属性,三个Button按钮的竖直高度都是match_parent,所以,每个Button都占满了一个屏幕,
①1+1+1=3(总共占了三个屏幕的大小);1-3=-2(本身只有一块屏幕,所需要的却是3块屏幕的大小,相减也就是剩余-2块屏幕的空间大小)
②剩余的大小来按权重分配:
Button1:1+(-2 * (1/6)) =2/3;意思是:( 原本的大小1)+ 剩余屏幕大小的所占的空间大小 = Button1实际占的大小
Button2:1+(-2 *(2/6))=1/3;意思跟上类似
Button3:1+(-2*(3/6))=0;
③所以效果图就上如上所示,如果还不清楚,看第一个例子,权重为1、1、1的例子,其实原理还是以上所讲,只不过一个剩余的屏幕空间为正数,一个剩余的屏幕空间为负数,差别仅此而已。
总结:
① 先分配完没有设置权重属性空间的所占空间
②在分配设置有权重属性控件的所占空间,算法如上所示。
到此:LinearLayout(线性)布局 讲解完毕,很多属性没有细讲,用到的时候在查看API文档。