安卓六大布局之 线性布局(LinearLayout)
Android的界面是有布局和组件协同完成的,布局好比是建筑里的框架,而组件则相当于建筑里的砖瓦。组件按照布局的要求依次排列,就组成了用户所看见的界面。
Android的六大布局分别是
- LinearLayout(线性布局)
- RelativeLayout(相对布局)
- FrameLayout(单帧布局)
- AbsoluteLayout(绝对布局)
- TableLayout(表格布局)
- Android4.0之后新增的GridLayout(网格布局)
线性布局。这个布局简单的说,就是所有控件都依次排序,
谁也不会覆盖谁。线性布局需要定义一个方向,
横向(Android:orientation="horizontal")
或纵向(android:orientation="vertical")。
也就是说,控件要么就并排横向的排列,要么就纵向的笔直排列。
这是一个水平的线性布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/activity_main"android:layout_width="match_parent"android:orientation="horizontal"android:layout_height="match_parent"><TextView
android:background="#da0202"android:layout_width="100dp"android:layout_height="100dp"android:text="Hello World!" /><TextView
android:background="#1aab95"android:layout_width="100dp"android:layout_height="100dp"android:text="Hello World!" /><TextView
android:background="#1f1f99"android:layout_width="100dp"android:layout_height="100dp"android:text="Hello World!" /><TextView
android:background="#121010"android:layout_width="100dp"android:layout_height="100dp"android:text="Hello World!" />
</LinearLayout>
我么可以看到水平线性布局把控件依次水平线性排列不会重叠,但是第四个明显放不下跑到屏幕外面去了。
我们再来看看垂直方向的将android:orientation=”horizontal”改成android:orientation=”vertical”
这里变成了垂直排列其中的控件。
从这里我们可以看出线性布局没法直接控制控件的具体位置,以及相对的位置关系。每个控件都依次摆放。不过控件间的间距可以调整,控件也不会相互覆盖。线性布局可以嵌套使用,可以在一个纵向布局中加入一个横向布局。用这种嵌套方式,可以完成一些稍微复杂的页面。不过,当嵌套的情况使用的多了,并且嵌套的层次也多了,就会给维护带来非常大的麻烦。自己回头再看布局那就真是头大了。
下面学习下如何将其中的控件均匀摆放,恩就是权重。android:layout_weight
我们将上面的布局代码更改如下
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/activity_main"android:layout_width="match_parent"android:orientation="horizontal"android:layout_height="match_parent"><TextView
android:background="#da0202"android:layout_width="0dp"android:layout_weight="1"android:layout_height="100dp"android:text="Hello World!" /><TextView
android:background="#1aab95"android:layout_width="0dp"android:layout_weight="1"android:layout_height="100dp"android:text="Hello World!" /><TextView
android:background="#1f1f99"android:layout_width="0dp"android:layout_weight="1"android:layout_height="100dp"android:text="Hello World!" /><TextView
android:background="#121010"android:layout_width="0dp"android:layout_weight="1"android:layout_height="100dp"android:text="Hello World!" />
</LinearLayout>
是不是美观许多了? 有读者可能会问 调整宽高不就行了么还弄权重这么麻烦,其实不然安卓机型差异非常大各个型号的分辨率都有,如果固定宽高必然会造成机型显示差异,那样子就很尴尬了。权重也就是按比例来分配控件。谷歌建议水平线性布局的宽度设置成0dp后再设置对应控件的权重,垂直的的高度设置成0再设置权重。为什么这么建议我们来看下一些由权重分配导致的问题:
代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/activity_main"android:layout_width="match_parent"android:orientation="horizontal"android:layout_height="match_parent"><TextView
android:background="#da0202"android:layout_width="match_parent"android:layout_weight="1"android:layout_height="100dp"android:text="Hello World!" /><TextView
android:background="#1aab95"android:layout_width="match_parent"android:layout_weight="2"android:layout_height="100dp"android:text="Hello World!" /></LinearLayout>
我们发现权重比是1:2 然而这两个控件的比例却反过来了!
再来看看垂直方向的
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/activity_main"android:layout_width="match_parent"android:orientation="vertical"android:layout_height="match_parent"><TextView
android:background="#da0202"android:layout_width="match_parent"android:layout_weight="1"android:layout_height="match_parent"android:text="Hello World!" /><TextView
android:background="#1aab95"android:layout_width="match_parent"android:layout_weight="2"android:layout_height="match_parent"android:text="Hello World!" /></LinearLayout>
不负所望。。。还是倒过来了。
这究竟怎么回事呢?下面请读者理解这句话
权重(layout_weight)对线性布局中水平(垂直)方向的剩余空间进行分配。
那么我们现在假设这个手机横向宽度 480dp 纵向高度480dp 。先分析水平方向的布局。
左边的红色控件占据的的空间为match_parent 也就是320dp 右边绿色的空间占据的空间也是320dp 此时屏幕剩余的空间是多少? 480dp - 480dp - 480dp = -480dp ; 此时屏幕剩余空间是-320dp 那么左右进行比例分配 也就是
左边的空间为 : 480dp + 1/3 * (-480dp ) = 320dp
右边的空间为 :480dp + 2/3 * (-480dp ) = 160dp
现在是不是符合上面的现象了?
垂直方向的分析也是如此 请读者思考下
总结下权重分配有两种情况:
情况1:当线性布局中内部子控件的宽度之和大于线性布局的总宽度时,即权重越大,当前控件所占空间越小。
情况2:当线性布局中内部子控件的宽度之和小于线性布局的总宽度时,即权重越大,当前控件所占空间越小。
所以我们在使用权重的时候一般情况把要布局的一般把width或者height设置为0dp
今天的分享的就到这里~~~
安卓六大布局之 线性布局(LinearLayout)相关推荐
- Android布局之线性布局LinearLayout(二) ----简单模仿ios端小米计算器主界面UI
Android布局之线性布局LinearLayout(二) ----简单模仿ios端小米计算器主界面UI 今天老师的要求是让用LinearLayout布局做自己手机自带的计算器的UI设计,因为io ...
- gridlayout布局单元格宽度设置_安卓界面布局之线性布局
Android中有六大布局,分别是: LinearLayout(线性布局),RelativeLayout(相对布局),TableLayout(表格布局) .FrameLayout(帧布局),Absol ...
- Android 开发 -- 开发第一个安卓程序、Android UI开发(布局的创建:相对布局和线性布局、控件单位:px pt dp sp、常用控件 、常见对话框、ListView)
文章目录 1. 开发第一个Hello World程序 1.1 开发程序 1.2 认识程序中的文件 1.3 Android程序结构 1.4 安卓程序打包 2. Android UI开发 2.1 布局的创 ...
- 六大布局之线性布局详解
1. 什么是Layout? Layout--界面布局,为应用程序提供界面架构.控制Activity中控件的大小.位置.颜色等属性的方法. Layout 与 ViewGroup的关系 ViewGroup ...
- Android UI布局之线性布局LinearLayout
Android UI 布局 线性布局 线性布局 activity_main.xml <?xml version="1.0" encoding="utf-8" ...
- java 界面线性布局_LinearLayout(线性布局)详解
本节引言 本节开始讲Android中的布局,Android中有六大布局,分别是: LinearLayout(线性布局),RelativeLayout(相对布局),TableLayout(表格布局) F ...
- android布局之线性布局
LinearLayout 线性布局有两种,分别是水平线性布局和垂直线性布局,LinearLayout属性中android:orientation为设置线性布局当其="vertical&quo ...
- 【Android】UI布局之线性布局(登录界面代码)
1.布局管理 组件在activity中呈现的方式,包含组件大小.间距.对齐方式 Android提供了两种布局的实现方式: .在xml配置文件中声明,通过setContentView(R.layout. ...
- 线性布局html,线性布局中的layout_weight属性
layout_weight属性是线性布局的特有属性,当需要去按比例分配某一行或某一列上的控件时,通常会想到使用权重这个属性去解决,一般在使用该属性时,要把控件的layout_width或layout_ ...
最新文章
- 【leetcode】Best Time to Buy and Sell Stock
- 用navicat连接数据库报错:1130-host ... is not allowed to connect to this MySql server如何处理
- 结构体数组(SoA)与数组结构体(AoS)
- ”扶我起来,我还能学!“ 之ES2021 抢先尝
- Spring Data Jpa的JpaRepository的getOne()方法查询数据实体时报错could not initialize proxy
- cuda11.0 cudnn 11.0 torch1.7.1+cu110 torchvision 0.8.2+cu110 安装包
- 如何遍历json属性和动态添加属性
- 怎样恢复电脑丢失的文件?
- 大学的终结,终结了什么???
- 基于ndis protocol driver 后门 分析
- Programming C#.Classes and Objects.传递参数
- MAE TransMix
- 整合flink-cdc实现实时读postgrasql
- 小鲨鱼的程序生涯开始
- 用 HI3559A / Hi3519A 接入 BT1120或BT656视频
- 上海地铁和北京地铁_地铁介绍
- MongoDB数据库简介
- 绝了!搜狗输入法这骚操作!
- HR软件切忌过度招标
- 01219 oracle,oracle for win移机ORA-01219问题解决方法详解