当前位置:   article > 正文

Android 学习:布局方式_android:layout_height

android:layout_height

Android 学习:布局方式

1、线性布局

线性布局:

控件从左到右排列:水平方式

控件从上到下排列:垂直方式

标签:LinearLayout

1.语法格式

    
  1. <LinearLayoutear xmlns:android="http://schemas.android.com/apk/res/android"
  2. android:layout_width="wrap_content"
  3. android:layout_height="wrap_content">
  4. <!--属性列表-->
  5. </LinearLayoutear>

xmlns:android:声明一个命名空间前缀,叫做 Android,http://schemas.andeoid.com/apk/res/android ,是网格格式,才可以使用Android前缀

2.常用属性

android:orientation

android:orientation="vertical" 是控件垂直排列
android:orientation="horizontal"是控件水平排列

android:gravity

用于设置布局管理器中控件的对齐方式,其可选值包括 top、bottom、left、right、cnter、center_horizontal和center_vertical等。这些属性值可以同时指定也可以单独指定,同时指定时需要用竖线在各属性之间隔开,例如指定控件靠左上角对齐,可以设置该属性值为left|top。android:geavity属性的各项可选值的具体功能如下表:

属性值说明
top将控件放在其容器的顶端,不改变其大小
bottom将控件放在其容器的底端,不改变其大小
left将控件放在其容器的左端,不改变其大小
right将控件放在其容器的右端,不改变其大小
center_vertical将控件纵向居中,不改变其大小
fill_vertical增加控件的纵向大小,以完全充满容器
center_horizontal将控件横向居中,不改变其大小
fill_horizontal增加控件的横向大小,以完全充满容器
center将控件横向、纵向居中,不改变其大小
fill增加控件的横向、纵向大小,以完全充满其容器

android:layout_width 和 android:layout_height

分别用于设置控件的宽度和高度,可选值包括fill_parent、match_parent和wrap_content,其中,fill_parent强制性地使控件扩展以充满布局单元的空间。

从Android2.2开始,match_parent 和 fill_parent功能相同,如果兼顾低版本的使用,就只能使用fill_parent。wrap_parent可以自适应大小,强制使视图扩展以便显示其全部内容。

android:id

用于为控件指定一个id属性,这样在java代码中就可以通过该属性值来引用相应的控件,并通过代码操作该控件。

android:background

用于为控件背景指定具体的图片或者将其设置为某一颜色。(注:Android Studio向导创建的Android应用程序的用户登录界面默认背景未必是白色)

【提示】 控件的属性中,带有layout的属性(如android:layout_gravity)用来设置控件本身的对齐方式;不带layout的属性(android:gravity)用来设置该控件所包含的子元素的对齐方式。

线性布局的练习:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical">
  6. <!-- 线性布局;Ctrl+Alt+L键:格式化代码;-->
  7. <!--
  8. 1.行 用户名: 输入框
  9. 2.行 密码:输入框
  10. 3.登录 取消
  11. -->
  12. <!-- 1.第一行线性布局:水平方式
  13. match_parent 表示使空间填充布局单元内的尽可能多的空间,
  14. wrap_content:表示使视图扩展以现实全部内容;
  15. layout_width:布局宽;
  16. layout_height:height:布局高度;
  17. txt:文本内容
  18. textSize:文本大小
  19. layout_weight:字体粗细
  20. paddingLeft:左填充
  21. paddingTop:上填充;
  22. -->
  23. <LinearLayout
  24. android:layout_width="match_parent"
  25. android:layout_height="wrap_content">
  26. <TextView
  27. android:layout_width="0dp"
  28. android:layout_height="wrap_content"
  29. android:layout_weight="1"
  30. android:paddingLeft="15dp"
  31. android:paddingTop="15dp"
  32. android:text="用户"
  33. android:textSize="20dp" />
  34. <EditText
  35. android:layout_width="0dp"
  36. android:layout_height="wrap_content"
  37. android:layout_weight="3" />
  38. </LinearLayout>
  39. <!-- 第二行,线性布局,水平方式-->
  40. <LinearLayout
  41. android:layout_width="match_parent"
  42. android:layout_height="wrap_content">
  43. <TextView
  44. android:layout_width="0dp"
  45. android:layout_height="wrap_content"
  46. android:layout_weight="1"
  47. android:paddingLeft="10dp"
  48. android:paddingTop="10dp"
  49. android:text="密码"
  50. android:textSize="20dp" />
  51. <EditText
  52. android:layout_width="0dp"
  53. android:layout_height="wrap_content"
  54. android:layout_weight="3" />
  55. </LinearLayout>
  56. <!-- 第三行,线性布局,水平方式-->
  57. <LinearLayout
  58. android:layout_width="match_parent"
  59. android:layout_height="wrap_content">
  60. <Button
  61. android:layout_width="match_parent"
  62. android:layout_height="wrap_content"
  63. android:layout_weight="1"
  64. android:text="登录"/>
  65. <Button
  66. android:layout_width="match_parent"
  67. android:layout_height="wrap_content"
  68. android:layout_weight="1"
  69. android:text="取消"/>
  70. </LinearLayout>
  71. </LinearLayout>

除了LinearLayout线性布局之外,上面代码里还讲了三个控件;

1、TextView:显示文本提示内容

2、EditText:输入框

3、Button:按钮

【提示】单独一个线性布局管理器中包含的控件,要么全部水平布局,要么全部垂直布局,如果要控件水平布局和垂直布局并存,可以将线性布局管理器(包括后续将介绍的其他几种布局管理器)进行嵌套。

2、表格布局

表格布局管理器(TableLayout)用行、列(也称为单元格)方式来管理容器内的控件,无论是在界面的设计状态还是实际运行状态,都不会显示表格线。在TableRow中,每添加一个TableRow控件,就添加一行,然后就可以在TableRow中添加其他需要布局的具体控件,而在TableRow中每添加一个具体控件,当前行就增加一列(列可以为空)。

表格布局管理器的列数由包含的列数最多的那一行确定。并且,列还可以根据实际需要被隐藏、伸展或者收缩。

1、语法格式

表格布局管理器的语法格式如下:

  1. <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2.    android:layout_width="wrap_content"
  3.    android:layout_height="wrap_content">
  4.    <TableRow ...>
  5.       ...
  6.     </TableRow>
  7.       ...
  8. </TableLayout>

2、常用属性

TableLayout继承自LinearLayout,所以它完全支持线性布局管理器的全部XML属性,另外,TableLayout还支持下表所示的其他XML属性。

XML属性说明
android:collapseColumns设置需要隐藏的列的序号(序号从0开始),多个序号之间用逗号隔开
android:stretchColumns设置需要拉伸的列的序号(序号从0开始),多个序号之间用逗号隔开
android:shrinkColumns设置需要收缩的列的序号(序号从0隔开),多个序号之间用逗号隔开
android:layout_columns为容器中所包含的控件设置属性,指定该控件在TableRow中占据第几列
android:layout_span为容器中所包含的控件设置属性,指定该控件在TableRow中占据第几列

表格布局的练习:

  1. <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2.    xmlns:app="http://schemas.android.com/apk/res-auto"
  3.    xmlns:tools="http://schemas.android.com/tools"
  4.    android:layout_width="wrap_content"
  5.    android:layout_height="wrap_content"
  6.    android:layout_gravity="center"
  7.    tools:context=".MainActivity">
  8.    <TableRow
  9.        android:layout_width="match_parent"
  10.        android:layout_height="match_parent">
  11.        <TextView
  12.            android:id="@+id/textView"
  13.            android:layout_width="wrap_content"
  14.            android:layout_height="wrap_content"
  15.            android:text="用户名:" />
  16.        <EditText
  17.            android:id="@+id/editTesr"
  18.            android:layout_height="wrap_content"
  19.            android:layout_width="wrap_content"
  20.            android:layout_span="2"
  21.            android:inputType="textPersonName"/>
  22.    </TableRow>
  23.    <TableRow
  24.        android:layout_width="match_parent"
  25.        android:layout_height="match_parent">
  26.     <TextView
  27.         android:id="@+id/textView2"
  28.         android:layout_height="wrap_content"
  29.         android:layout_width="wrap_content"
  30.         android:text="密码:"/>
  31.        <EditText
  32.            android:id="@+id/editTest2"
  33.            android:layout_width="wrap_content"
  34.            android:layout_height="wrap_content"
  35.            android:layout_span="2"
  36.            android:inputType="textPassword"/>
  37.    </TableRow>
  38.    <TableRow
  39.        android:layout_height="match_parent"
  40.        android:layout_width="match_parent">
  41.        <Button
  42.            android:id="@+id/button1"
  43.            android:layout_width="wrap_content"
  44.            android:layout_height="wrap_content"
  45.            android:layout_column="0"
  46.            android:text="确定"/>
  47.        <TextView
  48.            android:id="@+id/textView3"
  49.            android:layout_width="50dp"
  50.            android:layout_height="wrap_content"
  51.            android:text=""/>
  52.        <Button
  53.            android:id="@+id/button2"
  54.            android:layout_width="wrap_content"
  55.            android:layout_height="wrap_content"
  56.            android:layout_column="2"
  57.            android:text="取消"/>
  58.    </TableRow>
  59. </TableLayout>

3、网格布局

网格布局管理器(GridLayout)是Android SDK 4.0(API Level 14)以后才增加的新的布局方式。这种布局将容器划分为“行*列”的网格,每个控件置于相应的网格中,并且也可以通过设置相关属性使一个控件在网格中占据多行多列。相对而言,网格布局管理器比表格布局管理器在界面上更简单,高效。

1、语法格式:

  1. <GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2.    android:layout_height="wrap_content"
  3.    android:layout_width="wrap_content">
  4.    
  5.   ...
  6.    
  7. </GridLayout>

2、常用属性

下表为GridLayout所支持的常用XML属性。

XML属性说明
android:orientation可选值:vertical(控件垂直排列,默认),horizontal(控件水平排列)
android:rowCountint类型数值,设置网格布局的行数
android:columnCountint类型数值,设置网格布局的列数
android:layout_rowint类型数值,设置控件位于本数值指定的行
android:layout_columnint类型数值,设置控件位于本数值指定的列
android:layout_rowSpanint类型数值,设置控件横跨本数值指定的行数
android:layout_columnSpanint类型数值,设置控件横跨本数值指定的列数
android:layout_columnWeightint 类型数值,设置控件的列权重
android:layout_rowWeightint类型数值,设置控件的行权重

3、代码练习:

  1. <GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2.    xmlns:app="http://schemas.android.com/apk/res-auto"
  3.    xmlns:tools="http://schemas.android.com/tools"
  4.    android:layout_height="wrap_content"
  5.    android:layout_width="wrap_content"
  6.    android:layout_gravity="center"
  7.    android:columnCount="4"
  8.    android:rowCount="4"
  9.    tools:context=".MainActivity">
  10.    <TextView
  11.        android:id="@+id/textView1"
  12.        android:layout_width="wrap_content"
  13.        android:layout_height="wrap_content"
  14.        android:layout_row="0"
  15.        android:layout_column="0"
  16.        android:layout_columnSpan="3"
  17.        android:layout_gravity="center_horizontal"
  18.        android:text="----用户登录----"/>
  19.    <TextView
  20.        android:id="@+id/TextView2"
  21.        android:layout_width="wrap_content"
  22.        android:layout_height="wrap_content"
  23.        android:layout_row="1"
  24.        android:layout_column="0"
  25.        android:layout_gravity="right"
  26.        android:text="用户名:"/>
  27.    <EditText
  28.        android:id="@+id/editText1"
  29.        android:layout_width="150dp"
  30.        android:layout_height="wrap_content"
  31.        android:layout_columnSpan="2"
  32.        android:inputType="textPersonName"/>
  33.    <TextView
  34.        android:id="@+id/TextView3"
  35.        android:layout_width="wrap_content"
  36.        android:layout_height="wrap_content"
  37.        android:layout_row="2"
  38.        android:layout_column="0"
  39.        android:layout_gravity="right"
  40.        android:text="密码:"/>
  41.    <EditText
  42.        android:id="@+id/editText2"
  43.        android:layout_width="150dp"
  44.        android:layout_height="wrap_content"
  45.        android:layout_columnSpan="2"
  46.        android:inputType="textPassword"/>
  47.    <Button
  48.        android:id="@+id/button1"
  49.        android:layout_width="wrap_content"
  50.        android:layout_height="wrap_content"
  51.        android:layout_row="3"
  52.        android:layout_column="0"
  53.        android:text="确定" />
  54.    <Button
  55.        android:id="@+id/button2"
  56.        android:layout_width="wrap_content"
  57.        android:layout_height="wrap_content"
  58.        android:layout_row="4"
  59.        android:layout_column="0"
  60.        android:text="取消" />
  61. </GridLayout>

【提示】只有在API等级等于或者大于21的Android系统中,才有layout_columnWeight和layout_rowWeight这两个属性。另外,每当布局换行时,需要先设定当前行第一个控件所在行、列的位置属性值,紧随着第一个控件之后的控件,则无须再设置行、列属性值。

4、框架布局

框架布局管理器(FrameLayout)也称“帧布局管理器”,是所有布局管理器中最简单的一种布局,通常用于嵌套布局的局部区域设计,也经常被用在游戏程序开发中,显示自定义的动态视图。

框架布局管理器为容器内的每个控件创建一款块空白区域(帧),一帧对应一个控件,后面的添加的帧(控件)会叠加到前面的帧(控件)上面。默认情况下,每帧以屏幕的左上角为坐标起点(0,0)开始布局,当然,也可以通过设置响应的gravity属性,来控制每一帧的对齐方式。还可以通过margin属性来设置每个帧的位置,但是这种方式设置的位置,需要兼顾分辨率状况,否则,实际的显示效果可能不是预期的。

1、语法格式:

框架布局管理器的基本语法如下:

  1. <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. android:layout_height="wrap_content"
  3.    android:layout_width="wrap_content">
  4.   ......
  5. </FrameLayout>

2、常用属性

FrameLayout除了支持常规的一些XML属性外,还支持下表所示的其他常用XML属性。

XML属性说明
android:foreground设置当前帧布局容器的前景图像
android:foregroundGravity定义绘制前景图像的gravity属性,也就是前景图像的显示位置

3、代码练习:

  1. <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:app="http://schemas.android.com/apk/res-auto"
  3. xmlns:tools="http://schemas.android.com/tools"
  4. android:layout_height="wrap_content"
  5. android:layout_width="wrap_content"
  6. android:layout_gravity="center"
  7. tools:context=".MainActivity">
  8. <TextView
  9. android:layout_width="300dp"
  10. android:layout_height="300dp"
  11. android:layout_gravity="center"
  12. android:text="最低层文本框"
  13. android:textColor="#FFFFFF"/>
  14. <TextView
  15. android:id="@+id/textView"
  16. android:layout_width="200dp"
  17. android:layout_height="200dp"
  18. android:layout_gravity="center"
  19. android:background="#00FF00"
  20. android:text="中间层文本框"
  21. android:textColor="#000000"/>
  22. <TextView
  23. android:id="@+id/textView1"
  24. android:layout_width="100dp"
  25. android:layout_height="100dp"
  26. android:layout_gravity="center"
  27. android:background="#0000FF"
  28. android:text="中间层文本框"
  29. android:textColor="#FFFFFF"/>
  30. </FrameLayout>

5、相对布局

相对布局管理器(RelativeLayout)按照控件之间的相对位置或者控件于容器之间的相对位置进行定位,如控件B在控件A的左侧、右侧、上方或者下方。相对布局管理器是应用较多、使用较灵活的布局管理器之一。

1、语法格式:

相对布局管理器的基本语法如下:

  1. <RelativeLayout
  2. xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_height="wrap_content"
  4. android:layout_width="wrap_content">
  5. ......
  6. </RelativeLayout>

2、常用属性

下表为RelativeLayout所支持的常用XML属性

XML属性说明
android:gravity设置布局管理器中各控件的对齐方式
android:ignoreGravity指定布局管理器中响应的控件不受gravity的属性影响

除了上表中所列出的相对布局管理器的基本属性以外,RelativeLayout还提供了一个内部类RelativeLayout.LayoutParams,这个类提供的XML属性能够灵活地控制布局管理器中的控件,具体如下表所示:

XML属性说明
andorid:layout_above属性值为参考控件的id值,指定本控件位于参考控件的上方
android:layout_bellow属性值为参考控件的id值,指定本控件位于参考控件的下方
android:layout_toLeftOf属性值为参考控件的id值,指定本控件位于参考控件的下方
android:layout_toRightOf属性值为参考控件的id值,指定本控件位于参考控件的下方
android:layout_alignTop属性值为参考控件的id值,指定本控件与参考控件的上边界对齐
android:layout_alignBotton属性值为参考控件的id值,指定本控件与参考控件的下边界对齐
android:layout_alignLeft属性值为参考控件的id值,指定本控件与参考控件的左边界对齐
android:layout_alignRight属性值为参考控件的id值,指定本控件与参考控件的右边界对齐
android:layout_alignParentTop属性值为true或false,设置本控件是否与布局管理器的顶端对齐
android:layout_alignParentLeft属性值为true或false,设置本控件是否与布局管理器的左端对齐
android:layout_alignParentRight属性值为true或false,设置本控件是否与布局管理器的右端对齐
android:layout_alignParentBottom属性值为true或false,设置本控件是否与布局管理器的底端对齐
android:layout_centerHorizontal属性值为true或false,设置本控件是否位于布局管理器的水平居中位置
android:layout_centerInParent属性值为true或false,设置本控件是否位于布局管理器的中间位置
android:layout_centerVertical属性值为true或false,设置本控件是否位于布局管理器的垂直居中位置

6、约束布局

约束布局管理器(ConstraintLayout)是Android Studio 2.2中主要新增的功能之一,是2016年Google I/O推出并宣传的一个组件。虽然此前版本的Android Studio也支持可视化的界面设计,但是操作起来不方便,而ConstraintLayout则使可视化的界面设计更加灵活、方便。当然,可视化操作之后,Android Studio同样会自动为我们生成相应XML布局代码。

【说明】 在较新版本的Android Studio中,ConstraintLayout已经作为默认布局。

利用约束布局管理器进行布局设计,常用的技术要点如下:

1、手动添加约束

拖放所选控件的上、下、左、右的相应约束点到其所参照的控件的相应约束点上,即可为所选控件添加相应的约束。已添加的约束点将有原来的空心圆变成实心圆

2、删除约束(3种方法)

删除一个单独的约束:将鼠标悬浮在所选的控件的约束点上面,此时约束点会变成红色,单击一下该约束点即可将其删除

删除某一个控件的所有约束:选中一个控件,然后他的左下角会出现一个删除约束的图标,单击该图标即可删除所选控件的所有约束

删除当前界面的所有约束:单击布局区域上面工具栏中的删除约束按钮(Clear All Constraints )即可删除当前界面中的所有约束

3、Constraint Widget 约束滑块应用

控件属性(Attributes)面板的上部区域有一个Constraint Widget约束滑块,拖动它的纵向或横向滑块,就可以调节所选控件的布局位置。

约束滑块中间的正方形区域是用来控制控件大小的。一共有3种模式可选。

4、自动添加约束

Autoconnect(自动生成约束):可以为当前正在移动的控件自动添加一个或多个约束。如果不需要这个功能,可以单击关闭(默认是开启的)

Infer Constraints(自动推断约束):推断并自动添加认为必要的约束条件.此项约束功能与Autoconnect的区别在于,自动推断约束会创建布局上所有元素之间的约束。

5、创建控件之间的约束链。

同时选中需要设置约束链的几个控件,然后单击鼠标右键,在弹出的快捷菜单中选择Chains->Create Horizontal Chain(或者 Create Vertical Chain),即可为这些控件创建相应的水平或者垂直约束链

6、Guideline辅助约束布局

可以利用Guideline为约束布局添加相应的辅助线,从而更准确、快捷地进行约束布局设计,辅助线不会绘制到屏幕上,也不会展现给客户。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/270348?site
推荐阅读
相关标签
  

闽ICP备14008679号