andriod入门学习总结(二)

本文深入解析安卓应用的六大基本布局,包括线性布局、相对布局、表格布局、帧布局、绝对布局和网格布局的特点及使用场景。详细阐述了每个布局的属性设置,如width、height、gravity等,以及它们在不同设备屏幕上的表现和适配策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这一篇主要记录app表面上可以看得到的东西(UI布局等)。


所有的用户界面元素都是由View和ViewGroup的对象构成的。

  • View:是绘制在屏幕上的用户能与之交互的一个对象。
  • ViewGroup:则是一个用于存放其他View(和ViewGroup)对象的布局容器。
  • 安卓的八大常用控件:TextView,EditText,Button,CheckBox,RadioButton,ImageView,ImageButton,ProgressBar
  • Android六大基本布局:线性布局LinearLayout、表格布局TableLayout、相对布局RelativeLayout、层布局FrameLayout、绝对布局AbsoluteLayout、网格布局GridLayout。(其中,表格布局是线性布局的子类。网格布局是android 4.0后新增的布局。在手机程序设计中,绝对布局基本上不用,用得相对较多的是线性布局和相对布局。)

六大布局:

1.线性布局:

LinearLayout是用的较多的布局,它的weight(权重)属性,在等比例划分,屏幕适配方面优势较大;但是缺点,就是当界面比较复杂的时候,需要嵌套多层的 LinearLayout,这样就会降低UI Render的效率(渲染速度),而且如果是listview或者GridView上的 item,效率会更低,另外太多层LinearLayout嵌套会占用更多的系统资源,还有可能引发stackoverflow;

Linearlayout是一个视图组,可以在一个方向上垂直或水平对齐所有子项。

andriod:orientation属性指定布局方向。布局组件中的排列方式。vertical(垂直,为默认选项)horizontal(水平)。

andriod:gravity 控件组件包含的子元素的对齐方式。是对元素本身说的,元素本身的文本显示在什么地方。

andriod:layout_gravity控制组件在父容器中的对齐方式。

这两个属性可选的值有:top、bottom、left、right、center_vertical、fill_vertical、center_horizontal、fill_horizontal、center、fill、clip_vertical。 而且这些属性是可以多选的,用“|”分开。默认值是left。

andriod:width 布局的宽度,通常不写数字,用wrap_content,fill_parent,match_parent来表示。

wrap_content设置一个视图的尺寸为wrap_content将强制性地使视图扩展以显示全部内容。以TextView和ImageView控件为例,设置为wrap_content将完整显示其内部的文本和图像。布局元素将根据内容更改大小。设置一个视图的尺寸为wrap_content大体等同于设置Windows控件的Autosize属性为True。

fill_parent设置一个构件的布局为fill_parent将强制性地使构件扩展,以填充布局单元内尽可能多的空间。match_parentAndroid2.2中match_parent和fill_parent是一个意思 .两个参数意思一样,match_parent更贴切,于是从2.2开始两个词都可以用。那么如果考虑低版本的使用情况你就需要用fill_parent了

andriod:layout_height 高度的参数,和宽度一样。

andriod:id 为组件起一个名字吧,在java文件中通过findViewById(id)找到它。

andriod:background 为组件设置背景,用背景图或者颜色覆盖均可。

android:background="#ffffff"     android:background="@drawable/background”(background.png在drawable文件夹下边)

android:layout_weight 权重,划分区域andriod:divider设置分割线图片,showDividers设置分割线所在的位置,有四个可选值none、middle、begining、end。dividerPadding设置分割线的padding。

当 android:orientation="vertical" 时, 只有水平方向的设置才起作用,垂直方向的设置不起作用。 即:left,right,center_horizontal 是生效的。 当 android:orientation="horizontal" 时, 只有垂直方向的设置才起作用,水平方向的设置不起作用。 即:top,bottom,center_vertical 是生效的。

weight权重设置:

  • 将涉及到的View的android:layout_width(或height)属性设置为0dp,然后再设置android:layout_weight="1"的比例即可。
  • 当android:layout_width(或height)为wrap_content时,直接同上设置比例即可。
  • 当android:layout_width(或height)为match_parent(fill_parent)时,需要计算。计算方法:设划分区域为x,各部分权重为yi,则每部分实际的占比为zi=1+(1-x)*yi;

2.相对布局

相对布局有一定的有点,对于线性布局遇到的多层次的问题,相对布局可能仅仅需要一层就可以完成了,以父容器或者兄弟组件参考+margin +padding就可以设置组件的显示位置,是比较方便的,因此,根据实际情况对这两种进行搭配使用提高效率。

基本属性

gravity 设置容器间组件的对齐方式

ignoreGravity 设置了该属性为true的属性组件,不受gravity属性的影响。

根据父容器定位

左对齐:android:layout_alighParentLeft

右对齐:android:layout_alighParentRight

顶端对齐:android:layout_alighParentTop

底部对齐:android:layout_alighParentBottom

水平居中:android:layout_centerHorizontal

垂直居中:android:layout_centerVertical

中央位置:android:layout_centerInParent

根据兄弟器件定位

左边:android:layout_toLeftOf

右边:android:layout_toRightOf

上方:android:layout_above

下方:android:layout_below

对齐上边界:android:layout_alignTop

对齐下边界:android:layout_alignBottom

对齐左边界:android:layout_alignLeft

对齐右边界:android:layout_alignRight

margin 偏移

android:layout_margin: 指定控件的四周的外部留出一定的边距

android:layout_marginLeft: 指定控件的左边的外部留出一定的边距

android:layout_marginTop: 指定控件的上边的外部留出一定的边距

android:layout_marginRight: 指定控件的右边的外部留出一定的边距

android:layout_marginBottom: 指定控件的下边的外部留出一定的边距

padding填充

android:padding :指定控件的四周的内部留出一定的边距

android:paddingLeft: 指定控件的左边的内部留出一定的边距

android:paddingTop: 指定控件的上边的内部留出一定的边距

android:paddingRight: 指定控件的右边的内部留出一定的边距

android:paddingBottom: 指定控件的下边的内部留出一定的边距

margin代表的是偏移,比如marginleft = "5dp"表示组件离容器左边缘偏移5dp; 而padding代表的则是填充,而填充的对象针对的是组件中的元素,比如TextView中的文字 比如为TextView设置paddingleft = "5dp",则是在组件里的元素的左边填充5dp的空间! margin针对的是容器中的组件,而padding针对的是组件中的元素。

3.表格布局

用表格的方式来排列组件,直接设置行列数。

全局属性:

  • android:stretchColumns    设置可伸展的列。该列可以向行方向伸展,最多可占据一整行。
  • android:shrinkColumns     设置可收缩的列。当该列子控件的内容太多,已经挤满所在行,那么该子控件的内容将往列方向显示。
  • android:collapseColumns 设置要隐藏的列。

单元格属性:

  • android:layout_column    指定该单元格在第几列显示
  • android:layout_span        指定该单元格占据的列数(未指定时,为1)

4.帧布局

直接在屏幕上开辟出一块空白的区域,当我们往里面添加控件的时候,会默认把他们放到这块区域的左上角,而这种布局方式却没有任何的定位方式,所以它应用的场景并不多;帧布局的大小由控件中最大的子控件决定,如果控件的大小一样大的话,那么同一时刻就只能看到最上面的那个组件!后续添加的控件会覆盖前一个!虽然默认会将控件放置在左上角,但是也可以通过layout_gravity属性,指定到其他的位置。

  • android:foreground:*设置改帧布局容器的前景图像
  • android:foregroundGravity:设置前景图像显示的位置

5.网格布局

  • 可以自己设置布局中组件的排列方式
  • 可以自定义网格布局有多少行,多少列
  • 可以直接设置组件位于某行某列
  • 可以设置组件横跨几行或者几列

属性:

  • android:alignmentMode 
    说明:当设置alignMargins,使视图的外边界之间进行校准。可以取以下值: 
    alignBounds – 对齐子视图边界。 
    alignMargins – 对齐子视距内容。
  • android:columnCount 
    说明:GridLayout的最大列数
  • android:rowCount 
    说明:GridLayout的最大行数
  • android:columnOrderPreserved 
    说明:当设置为true,使列边界显示的顺序和列索引的顺序相同。默认是true。
  • android:orientation 
    说明:GridLayout中子元素的布局方向。有以下取值: 
    horizontal – 水平布局。 
    vertical – 竖直布局。
  • android:rowOrderPreserved 
    说明:当设置为true,使行边界显示的顺序和行索引的顺序相同。默认是true。
  • android:useDefaultMargins 
    说明: 当设置ture,当没有指定视图的布局参数时,告诉GridLayout使用默认的边距。默认值是false。
  • android:layout_column 
    说明:显示该子控件的列,例如android:layout_column=”0”,表示当前子控件显示在第1列,android:layout_column=”1”,表示当前子控件显示在第2列。
  • android:layout_columnSpan 说明:该控件所占的列数,例如android:layout_columnSpan=”2”,表示当前子控件占两列。
  • android:layout_row 说明:显示该子控件的行,例如android:layout_row=”0”,表示当前子控件显示在第1行,android:layout_row=”1”,表示当前子控件显示在第2行。
  • android:layout_rowSpan 说明:该控件所占的列数,例如android:layout_rowSpan=”2”,表示当前子控件占两行。android:layout_columnWeight 说明:该控件的列权重,与android:layout_weight类似,例如有GridLayout上两列,都设置android:layout_columnWeight = “1”,则两列各占GridLayout宽度的一半
  • android:layout_rowWeight 
    说明:该控件的行权重,原理同android:layout_columnWeight。

6.绝对布局(单位是dp)

android:layout_width:组件宽度 

android:layout_height:组件高度

android:layout_x:设置组件的X坐标 

android:layout_y:设置组件的Y坐标

 

 

Android中visibility属性VISIBLE、INVISIBLE、GONE的区别

VISIBLE:设置控件可见

INVISIBLE:设置控件不可见

GONE:设置控件隐藏

而INVISIBLE和GONE的主要区别是:当控件visibility属性为INVISIBLE时,界面保留了view控件所占有的空间;而控件属性为GONE时,界面则不保留view控件所占有的空间。

参考链接:https://blog.youkuaiyun.com/chindroid/article/details/8000713

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值