LinearLayout

LinearLayout源码解析 为什么学习自从学了Android自定义控件的一些知识,总是处于似懂非懂状态,说都说了上来,自己在项目里封装了一些自定义控件,但是还是缺乏一个很直观的了解。所以去了解学习下Android是如何封装控件的,就从简单的入手,分析下LinearLayout是如何实现的什么是LinearLayout作为最基础布局,所以从事过Android开发的同学都应该非常了解 中文解释应该叫做线性布局,相比如Relat 阅读详情

LinearLayout,其实就是线性布局,结构层次相对来说简单非常明了,只有横和竖2条直线的方向。这里主要记录下LinearLayout的重要属性,以及使用时需要注意的事项。

1.排列方式orientation

在XML布局中:

android:orientation="vertical"//垂直排列

android:orientation="horizontal"//水平排列

注意事项:

控制LinearLayout的子控件内部具体的排列顺序,还需要使用android:layout_gravity这个属性。

可是当orientation为vertical时,子控件设置android:layout_gravity="center_vertical"或者自身设置android:gravity="center_vertical"是无效的。

同样当orientation为horizontal时,子控件设置android:layout_gravity="center_horizontal"或者自身设置android:gravity="center_horizontal"是无效的。

2.摆放位置gravity

从上面可以得知:在父控件中android:gravity属性和其子控件的android:layout_gravity效果是一样的。

既然上面提到了gravity,下面就对它的选项(可以多选)进行下解释:

center:居中  center_horizontal:水平居中 center_vertical:垂直居中

left:偏左  |right:偏右  (start和end:详见 这里有这2个属性的解释

bottom:偏下 |top:偏上

下面的一些没怎么用过:

fill:充满容器 |fill_horizontal:水平方向充满容器 |fill_vertical:垂直方向充满容器

clip_horizontal:水平裁剪|clip_vertical:垂直裁剪

3.分割线showDividers

 

既然是设置分割线,首先我们就需要有分割线:

android:divider="@drawable/drawable"//分割线的drwable,不能直接给color(无效)

android:dividerPadding="0.5dp"//分割线高度或者宽度

分割线的Shape.xml:

<shape xmlns:android="http://schemas.android.com/apk/res/android">

<solid android:color="@color/colorAccent"/>

<size android:height="1px"/>

</shape>

注意:size必须设置,不然显示不出

选择的样式(可以多选):

LinearLayout.SHOW_DIVIDER_BEGINNING;//开始的分割线

LinearLayout.SHOW_DIVIDER_MIDDLE;//中间的分割线

LinearLayout.SHOW_DIVIDER_END;//结束的分割线

LinearLayout.SHOW_DIVIDER_NONE;//没有分割线

其他方法:

用一个View将高度或宽度设置为match_parent,另一个长度设置为0.5dp,设置一个background

来达到分割线的效果:

<View android:layout_width="match_parent"

android:layout_height="0.5dp"

android:background="@color/colorPrimary"/>

在开发中,用的这种方式,可是个人觉得上面这个方式,代码比较简约.

4.基线baselineAligned

 

上图中2个布局其实都差不多,唯一的区别就是:第二个布局的android:baselineAligned="false";

不难发现有基线的情况下,文字默认都在一条直线上,这样我们有时候就会有布局的麻烦,解决方法当然就是设置基线为false;

同时,我们可以利用基线来布局如布局二的样式,是不是感觉很常见的一个底部菜单栏样式?

注意:基线只对有文字内容,如TextView,EditText,Button等才有效果。

5.权重weight

 

图一的布局:

<LinearLayout

android:layout_width="match_parent"

android:layout_height="50dp"

android:orientation="horizontal">

<TextVIew android:id="@+id/tv1"

android:layout_width="wrap_content"

android:layout_height="50dp"

android:layout_weight="1"

android:background="@color/colorPrimary"/>

<TextView android:id="@+id/tv2"

android:layout_width="wrap_content"

android:layout_height="50dp"

android:layout_weight="2"

android:background="@color/colorAccent"/>

<TextView android:id="@+id/tv3"

android:layout_width="wrap_content"

android:layout_height="50dp"

android:layout_weight="2"

android:background="@color/colorPrimaryDark"/>

</LinearLayout>

图二的布局:

仅仅只是将TextView的android:layout_width="match_parent";

在图片可以看出,wrap_content情况下, tv1:tv2:tv3=1:2:2;刚好是权重的比值。

符合大家所说的权重比值,权重越多比例越大。

可是在match_parent的情况下,tv1:tv2:tv3=3:1:1,这样明显不是我们想要的结果。

那么权重到底是怎么计算的呢?

首先按照分配的长度来给予长度,剩余的长度再按权重的比例来分配。

图二 tv1的宽度:match_parent,我们这里用L表示。

那么tv2和tv3的宽度也是L。

这时候剩余的长度呢?当然是总长度减去3个控件的长度,即:L-3L=-2L。

然后将这个剩余长度再来分配:

tv1的宽度=L-(1/5)2L=(3/5)L;

tv2和tv3的宽度=L-(2/5)2L=(1/5)L;

6.源码地址

LinearLayoutDemo

Android】XML布局:线性布局LinearLayout、相对布局RelativeLayout、网格布局GridLayout、滚动视图 ScrollView LinearLayout,相对布局RelativeLayout,网格布局GridLayout,滚动视图 ScrollView 阅读详情

相关推荐

android linearlayout代替listview实现

最近在写项目,遇到了一个问题,需要在一个页面中显示两个列表

未来尚未知的博客 2289

android线性布局LinearLayout及其常用属性

android线性布局LinearLayout及其常用属性

yizhousai0662的博客 1548

(四)Android布局类型(线性布局LinearLayout

Android布局类型:LinearLayout

以秘 1305

Android】线性布局LinearLayout)最全解析

Android】线性布局LinearLayout)最全解析一、LinearLayout概述二、LinearLayout常用属性2.1 orientation属性2.2 gravity属性2.3 layout_weight属性 一、LinearLayout概述 线性布局LinearLayout)主要以水平或垂直方式来排列界面中的控件。并将控件排列到一条直线上。在线性布局中,如果水平排列,垂直方向上只能放一个控件,如果垂直排列,水平方向上也只能方一个控件。 使用线性布局,需要将布局节点改成LinearL

lucashu的博客 6万+

linearlayout总结

LinearLayout 线性布局有两种,分别是水平线性布局和垂直线性布局LinearLayout属性中android:orientation为设置线性布局当 其="vertical"时,为 垂直线性布局,当其="horizontal"时,为水平线性布局,不管是水平还是垂直线性布局一行(列)只能放置一个控件。 一、 linearlayout的属性: android:background

u010695063的专栏 998

LinearLayout详解一:LinearLayout的简介

打蛇要打七寸,做事情要做要害,看东西要看本质。LinearLayout的本质,也就是他的最上层的类,其实是View类

kyson 3837

androidLinearLayout中动态添加View

androidLinearLayout中动态添加View前言了解使用参考完事 前言 在项目中有一个列表,列表里的item里面还有一个未知个数的横向列表 用列表来做,RecyclerView、ListView、GridView都需要另外再写一个Adapter,显得麻烦。这时候直接用一个横向的LinearLayout来使用addView方法就很方便了 了解 addView是ViewGroup中特...

杨迪龙的博客 1万+

LinearLayout的onMeasure总结

void measureVertical(int widthMeasureSpec, int heightMeasureSpec) { mTotalLength = 0; int maxWidth = 0; int childState = 0; int alternativeMaxWidth = 0; int weig

gggggg0023的专栏 1839

关于linearlayout

LinearLayout----Layout that arranges its children in a single column or a single row. Linear--线性的,直线的意思 Layout--布局,规划 那么LinearLayout应该就是以线性的方式对它的组件进行布局的吧,只能以横向或纵向的方向规划组件,^_^  Ex1: <Linear

gsldqtan的专栏 604

LinearLayout 内部 挂件 居中

LinearLayout 内部 挂件 居中 Posted by androidfoot on August 10, 2010 Leave a comment (0)Go to comments 直接设置LinearLayout内部挂件 :android:layout_g

1万+

如何在代码中设置LinearLayout的高度

如何在代码中设置LinearLayout的高度 main.xml声明 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/context" android:layout_width="match_parent" android:layout_h

androiddeveloper的专栏 2万+

Linearlayout添加监听事件

今天用给LinearLayout添加监听,并按下改变LinearLayout的背景色,好了,废话不多说! 这是我的LinearLayout布局: descendantFocusability属性:         beforeDescendants:viewgroup会优先其子类控件而获取到焦点         afterDescendants:viewgr

joxpeng的专栏 6204

LinearLayout源码详解

今天关于面试的分享就到这里,还是那句话,有些东西你不仅要懂,而且要能够很好地表达出来,能够让面试官认可你的理解,例如Handler机制,这个是面试必问之题。有些晦涩的点,或许它只活在面试当中,实际工作当中你压根不会用到它,但是你要知道它是什么东西。最后在这里小编分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司19年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。还有。

2401_84121958的博客 953

android 设置 linearlayout 高度,在RelativeLayout中动态设置LinearLayout高度/宽度

我在RelativeLayout中有一个linearLayout。我需要能够根据屏幕尺寸动态设置线性布局的高度。我有一些困难。 我怎么能做到这一点?在RelativeLayout中动态设置LinearLayout高度/宽度MAIN:public class MainActivity extends Activity {LinearLayout L;@Overrideprotected void o...

weixin_29323365的博客 2857

LinearLayout中组件右对齐

LinearLayout中,如果将其定位方向设为横向排列:android:orientation="horizontal",那么这个布局中的控件将自左向右排列。 但有时会有这样的情况:行的左边有两个控制的同时,行的右边也有一个控制。 如图: 这怎么处理呢? 我们可以将右边的控件放在另一个LinearLayout中,同时将其对齐方式设为右对齐:android:gravity

Android移动开发者的专栏 3万+

linearlayout属性

Android:layout_alignBaseLine Android:layout_alignEnd Android:layout_alignStart Android:layout_alignBottom Android:layout_alignLeft Android:layout_alignRight Android:layout_alignTop Android:layout_toSt...

Hyy2162427252的博客 1785

如何保证linearlayout_怎么让LinearLayout占据父布局的所有剩余空间

LinearLayout是线性布局控件,它包含的子控件将以横向或竖向的方式排列,按照相对位置来排列所有的widgets或者其他的containers,超过边界时,某些控件将缺失或消失。因此一个垂直列表的每一行只会有一个widget或者是container,而不管他们有多宽,而一个水平列表将会只有一个行高(高度为最高子控件的高度加上边框高度)。LinearLayout保持其所包含的widget或者是...

weixin_39615808的博客 644

7 线性布局——LinearLayout

在上一节中,我们讲到了所有的 Layout 都是从 ViewGroup 继承而来,它可以包含若干 View 并按照指定的规则将这个 View 摆放到屏幕上。那么接下来的章节我们就来学习一下 Android 的 UI 布局Android 原生有六大布局,分别是: LinearLayout(线性布局)、RelativeLayout(相对布局)、TableLayout(表格布局)、FrameLayout(帧布局)、AbsoluteLayout(绝对布局)、GridLayout(网格布局),我们从最简单实用的一个

MC 的技术空间 2738
上一篇: 浅析Margin和Padding属性
下一篇: Android点九图注意事项
Client_Block
博客等级 码龄11年 32粉丝 61原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值