欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

android相对布局属性(android相对布局讲解)

程序员文章站 2022-03-08 17:26:28
有哪些布局类型?android系统中为我们提供的五大布局:linearlayout(线性布局)、framelayout(单帧布局)、absolutelayout(绝对布局)、tablellayout(...

有哪些布局类型?

android系统中为我们提供的五大布局:linearlayout(线性布局)、framelayout(单帧布局)、absolutelayout(绝对布局)、tablellayout(表格布局)、relativelayout(相对布局)。其中最常用的的是linearlayout、tablellayout和relativelayout。这些布局都可以嵌套使用。

linearlayout(线性布局)

线性布局是按照水平或垂直的顺序将子元素(可以是控件或布局)依次按照顺序排列,每一个元素都位于前面一个元素之后。线性布局分为两种:水平方向和垂直方向的布局。分别通过属性android:orientation=”vertical” 和 android:orientation=”horizontal”来设置。

案例代码分析:

<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="match_parent"
 android:orientation="vertical"
 android:gravity="center_vertical|center_horizontal"
 tools:context="zzxb.me.layoutdemo.mainactivity">
 <button
 android:id="@+id/linearlo"
 android:text="@string/linear_name"
 android:layout_weight="1"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content" />
 <textview
 android:layout_weight="4"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content" />
 <button
 android:id="@+id/tablelo"
 android:text="@string/table_name"
 android:layout_weight="1"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content" />
 <textview
 android:layout_weight="4"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content" />
 <button
 android:id="@+id/framelo"
 android:text="@string/frame_name"
 android:layout_weight="1"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content" />
 <textview
 android:layout_weight="4"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content" />
 <button
 android:id="@+id/relativelo"
 android:text="@string/relative_name"
 android:layout_weight="1"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content" />
 <textview
 android:layout_weight="4"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content" />
 <button
 android:id="@+id/abslo"
 android:text="@string/abslayout_name"
 android:layout_weight="1"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content" />
</linearlayout>

线性布局是用<linearlayout>标签标示,其中常用的属性:


layout_width/layout_height:设置宽度和高度,其值有:wrap_content(适配内容大小),match_parent(适配父容器大小),此两个属性在各个控件中为通用属性

id:唯一标识该控件值

orientation:设置该布局是水平布局(horizontal)还是纵向布局(vertical)

gravity:设置控件的对齐方式,常用值:center_vertical(纵向居中)|center_horizontal(水平居中)

在<button>标签中,也同样有id,layout_width以及lay_height属性。同时,还有如下常用属性:

text:设置按钮文字,这里有两种方式,一种是直接硬编码,即直接写内容,例如:

 android:text="按钮"

第二种方式是非硬编码方式,是通过配置strings.xml文件来配置,例如:

<resources>
 <string name="btntext">按钮</string>
</resources>

然后,通过:

android:text="@string/btntext"

引用。

页面跳转的方式:

 intent intent = new intent();
 intent.setclass(mainactivity.this,linearactivity.class);
 startactivity(intent);

tablelayout(表格布局)

表格布局与常见的表格类似,以行、列的形式来管理放入其中的ui组件。表格布局使用<tablelayout>标签定义,在表格布局中,可以添加多个<tablerow>标签占用一行。由于<tablerow>标签也是容器,所以还可以在该标签中添加其他组件,每添加一个组件,表格就会增加一列。在表格布局中,列可以被隐藏,也可以被设置为伸展的,从而填充可利用的屏幕空间,还可以设置为强制收缩,直到表格匹配屏幕大小。

tablelayout跟tablerow 是一组搭配应用的布局,tablelayout置底,tablerow在tablelayout的上方,而button、textview等控件就在tablerow之上.tablelayout是一个应用错杂的布局,最简单的用法就仅仅是拖沓控件做出个界面,但实际上,会经常在代码里应用tablelayout,例如做出表格的结果。

重要的几个属性如下:

 android:collapsecolumns="1,3" 隐藏第二列和第4列的控件
 android:stretchcolumns="0,2,4" 第一列和三列以及第五列的空白textview被拉伸
 android:shrinkcolumns="1,3" 第二列和第4列的控件被收缩

案例代码:

 <tablelayout
 android:stretchcolumns="0,2,4"
 android:layout_width="match_parent"
 android:layout_height="match_parent">
 <edittext
 android:hint="请输入用户名"
 android:textsize="15sp"
 android:layout_margin="6dp"
 android:background="@drawable/corner_round"
 android:drawableleft="@mipmap/account"
 android:layout_width="match_parent"
 android:layout_height="wrap_content" />
 <edittext
 android:hint="请输入密码"
 android:layout_margin="6dp"
 android:textsize="15sp"
 android:inputtype="textpassword"
 android:background="@drawable/corner_round"
 android:drawableleft="@mipmap/passwowrd"
 android:layout_width="match_parent"
 android:layout_height="wrap_content" />
 <tablerow>
 <textview
 android:layout_width="wrap_content"
 android:layout_height="wrap_content" />
 <button
 android:text="登录"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content" />
 <textview
 android:layout_width="wrap_content"
 android:layout_height="wrap_content" />
 <button
 android:text="注册"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content" />
 <textview
 android:layout_width="wrap_content"
 android:layout_height="wrap_content" />
 </tablerow>
 </tablelayout>

framelayout(帧布局)

帧布局被设计成在一个屏幕区域显示一个单一的项(single item)。通常framelayout显示一个单一的子控件,它支持的布局属性不够丰富,一般通过layout_gravity来设置子控件的位置。

framelayout的子控件被绘制在一个堆栈中,最近添加进来的子控件在堆栈的顶部。

案例代码:

 <framelayout
 android:layout_width="match_parent"
 android:layout_height="match_parent">
 <imageview
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:src="@mipmap/movie"
 android:contentdescription="@string/movie_desc"
 />
 <imageview
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:src="@mipmap/button"
 android:contentdescription="@string/pause_desc"
 android:layout_gravity="center"
 />
 </framelayout>

relativelayout(相对布局)

相对布局,子控件的位置关系可以通过子控件与父控件、子控件与子控件来确定,子控件之间位置可以重叠,后面的控件会盖在前面控件之上,拓展性好,灵活方便,是使用最多的布局方式。

案例代码:

 <relativelayout
 android:layout_width="match_parent"
 android:layout_height="wrap_content">
 <edittext
 android:id="@+id/et_uname"
 android:hint="请输入用户名"
 android:textsize="20sp"
 android:background="@drawable/corner_round"
 android:layout_alignparenttop="true"
 android:layout_width="match_parent"
 android:layout_height="wrap_content" />
 <edittext
 android:id="@+id/et_pwd"
 android:hint="请输入密码"
 android:inputtype="textpassword"
 android:layout_margintop="12dp"
 android:background="@drawable/corner_round"
 android:textsize="20sp"
 android:layout_below="@+id/et_uname"
 android:layout_width="match_parent"
 android:layout_height="wrap_content" />
 </relativelayout>
 <relativelayout
 android:layout_width="match_parent"
 android:layout_height="wrap_content">
 <button
 android:id="@+id/btn_login"
 android:text="登录"
 android:layout_width="150dp"
 android:layout_height="wrap_content" />
 <view
 android:id="@+id/v1"
 android:layout_torightof="@+id/btn_login"
 android:layout_width="50dp"
 android:layout_height="0dp" />
 <button
 android:id="@+id/btn_reg"
 android:layout_torightof="@+id/v1"
 android:text="注册"
 android:layout_width="150dp"
 android:layout_height="wrap_content" />
 </relativelayout>

相对布局使用<relativelayout>标签,其常用属性如下:

android:layout_toleftof=”@+id/name” 指定控件的左边

android:layout_torightof=”@+id/name” 指定控件的右边

android:layout_above=”@+id/name” 指定控件的上边

android:layout_below=”@+id/name” 指定控件的下边

ndroid:layout_alignleft=”@+id/name” 与指定控件左对齐

android:layout_alignright=”@+id/name” 与指定控件右对齐

android:layout_aligntop=”@+id/name” 与指定控件顶部对齐


android:layout_alignbottom=”@+id/name” 与指定控件底部对齐


android:layout_alignparentleft=”true” 与父控件的左边对齐


android:layout_alignparentright=”true” 与父控件的右边对齐


android:layout_alignparenttop=”true” 与父控件顶部对齐


android:layout_alignparentbottom=”true” 与父控件底部对齐


android:layout_centerhorizontal=”true” 在父控件中水平居中


android:layout_centervertical=”true” 在父控件中垂直居中


android_layout_centerinparent=”true” 在父控件中中部居中

absolutelayout(绝对布局)

绝对布局,子控件的位置以绝对的位置定位,子控件之间可以重叠,相对于其他布局,缺少灵活性,在最新的android版本中已经不建议使用。

总结

在android布局控制中,最常用的是线性布局和相对布局,往往它们通常是配合使用,也就是嵌套使用。

关于layout_gravity与gravity的区别

从名字上可以看到,android:gravity是对元素本身说的,元素本身的文本显示在什么地方靠着换个属性设置,不过不设置默认是在左侧的。

android:layout_gravity是相对与它的父元素说的,说明元素显示在父元素的什么位置。

比如说button: android:layout_gravity 表示按钮在界面上的位置。 android:gravity表示button上的字在button上的位置。