LinearLayout,中文意思是线性布局。假设你是初学android的,肯定会非常困惑“啥叫布局”,啥又叫“线性布局”呢。

有的时候,我尝试用官方的语言去解释,但结果总是让人非常懊恼。所以我仅仅能跟大家通俗的说“LinearLayout”就是一个View,即视图,它跟Buttonbutton,Label标签一样,有自己的属性,比方说,高度,宽度,背景色等等。那么跟Buttonbutton,Label标签有啥差别呢。事实上也非常easy,就是这个LinearLayout他比其它的button之类的控件高端的地方在于,它本身又能够作为一个视图容器,用于放置像Button以及Layout之类的控件,而且他的子控件都是以“线性”方式布局的。背景交代完成,大家有疑问记得再问我哦!

然后,我们開始技术一点的,从代码层次来说。

首先我们看LinearLayout的类继承图表

能够发现,其继承自ViewGroup,从名字就不难看出,ViewGroup是视图组的意思。它能够容纳其它控件(记住,视图也是控件的一种),因此LinearLayout能放置其它子控件的说法也就有了根据。

然后我们解释他为什么是个视图,而且具体的介绍一下。这个非常重要哦,还是那句话,打蛇要打七寸,做事情要做要害,看东西要看本质。LinearLayout的本质,也就是他的最上层的类,事实上是View类(当然那个object就不多说了,再说我打你!)。

既然其父类的本质是view,那我们仅仅须要好好分析一下view就可以:

这个View类说来就话长了,但我们又不得不说,要说呢,就得说的彻底,要让大家看得一清二楚,明明确白。所以我们就从源码角度来看一个view是怎样被载入的吧。

假设大家不知道怎么下载android的源码,或者说懒得去下载(由于源码确实比較大,大概有10G)的话,教大家几个取巧的办法:

1.直接在google中输入“android view.java”就可以。这样的方法成功率很高,一般android的比較重要的类都能搜到。

2.给大家提供一个人家用于放源代码的的git:git@gitorious.org:rowboat/frameworks-base.git 大家自己去clone一下。(什么!你Y的竟然连git都不会用!服了,好吧,请继续往下看)。

3登录到这里。这是2里面提供的那个git的网页地址,在这里搜索对应要查找的类就能够查找android的源码了。

从头说起吧,一般android启动的是AndroidManifest.xml中带有

<intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter>

这种activity。然后去调用该activity中的

 public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.frame_content);}

方法。当中setContentView是把相应的Layout相应的xml解析成view并显示在屏幕上的方法,也就是以上代码中的R.layout.frame_content。

因为activity.java中的代码量太长,我这边就贴个链接,大家看一下:Activity.java

能够发如今1650行的地方有这么一句话:

    public void setContentView(int layoutResID) {getWindow().setContentView(layoutResID);}

然后我们跳转到738行

    public Window getWindow() {return mWindow;}

发现这个setContentView事实上调用的是mWindow的setContentView,mWindow非常easy理解,就是 member window嘛,以下我们继续往window里找。
有关window.java的源码大家能够在这里找到。

非常伤心的是,window类是个抽象类

public abstract class Window {

,他仅仅是定义了这些方法

    public abstract void setContentView(int layoutResID);public abstract void setContentView(View view);public abstract void setContentView(View view, ViewGroup.LayoutParams params);

而没有实现它,那真正实现的地方在哪里呢,请猛戳这里PhoneWindow.java 。可爱的你肯定在疑惑,我砸知道的呢,难道我有“第三仅仅眼”!靠,事实上这个说出来你就会沮丧了,四个字:官方文档。详见:

好,以下,我们開始看PhoneWindow.java 的源代码,直接看函数setContentView:

 @Overridepublic void setContentView(int layoutResID) {if (mContentParent == null) {installDecor();} else {mContentParent.removeAllViews();}mLayoutInflater.inflate(layoutResID, mContentParent);final Callback cb = getCallback();if (cb != null) {cb.onContentChanged();}}

能够发现,事实上它又调用了mLayoutInflater的inflate方法。我,草!!!妈的,搞这么一层又一层干甚。不写了,且听下回分解。

转载于:https://www.cnblogs.com/mfrbuaa/p/3995177.html

LinearLayout具体解释一:LinearLayout的简单介绍相关推荐

  1. android linearlayout最大高度,Android中最简单最常用的LinearLayout线性布局

    原标题:Android中最简单最常用的LinearLayout线性布局 良好的布局设计对于UI界面至关重要,在前面也简单介绍过,目前Android中的布局主要有6种,创建的布局文件默认为Relativ ...

  2. Android Design Support Library 中控件的使用简单介绍(一)

    Android Design Support Library 中控件的使用简单介绍(一) 介绍 在这个 Lib 中主要包含了 8 个新的 material design 组件!最低支持 Android ...

  3. Android Design Support Library 中控件的使用简单介绍(一)介绍 在这个 Lib 中主要包含了 8 个新的 material design 组件!最低支持 Android

    介绍 在这个 Lib 中主要包含了 8 个新的 material design 组件!最低支持 Android 2.1 . 这些组件在我看来就是对 Github中最近比较火的 android 组件进行 ...

  4. QMUI简单介绍使用

    网址:https://github.com/QMUI/QMUI_Android 引入库 compile 'com.qmuiteam:qmui:1.0.0' 2.必须配置theme的parent指向QM ...

  5. 从零开始开发Android相机app(三)简单介绍图像滤镜功能

    目前章节 1.从零开始安卓端相机功能开发(一)了解用什么去开发以及流程 2.从零开始安卓端相机功能开发(二)让我们来开发一个相机 3.从零开始开发Android相机app(三)简单介绍图像滤镜功能 文 ...

  6. android开发笔记之高级主题—传感器的简单介绍

    今天我们开始进入讲解android中的一些高级主题的用法,比如传感器.GPS.NFC.语音和人脸识别等. 这次来对传感器的一个简单介绍: Android平台支持三大类的传感器: 位移传感器 这些传感器 ...

  7. WebView的简单介绍和Android使用WebView无法显示网页

    WebView的简单介绍: 现在许多手机app程序都在使用Web网页,比如咱们最知道的淘宝. 京东等. WebView是android中一个非常重要的控件,它的作用是用来展示web页面.它使用的内核是 ...

  8. Android Fragment(三)ListFragment简单介绍以及Fragment之间通信

    一.Fragment通信简单介绍:Fragments之间是不能够直接通信的,他们之间的通信是通过Activity这个中间件来通信的, 为了让Fragment跟它的Activity通信,我们可以在Fra ...

  9. 简单介绍一下R中的几种统计分布及常用模型

    统计学上分布有很多,在R中基本都有描述.因能力有限,我们就挑选几个常用的.比较重要的简单介绍一下每种分布的定义,公式,以及在R中的展示. 统计分布每一种分布有四个函数:d――density(密度函数) ...

最新文章

  1. 学python可以做什么职业好-业余学Python能做什么?对职业发展有什么帮助?
  2. 提效工具git的基本使用
  3. pythontcp服务器教程_tcp服务端无线为多个客户端服务|python基础教程|python入门|python教程...
  4. 2019蓝桥杯省赛b组
  5. 螺钉装弹垫平垫机器人_【经验总结】什么时候用平垫,什么时候用弹垫?
  6. 详细的DedeCMS(织梦)目录权限安全设置教程
  7. 卡屏java_Java drawImage到屏幕上一卡一卡的
  8. IE图标消失 HTML文件图标变为未知图标的解决方法
  9. 如何进行需求结构化管理?
  10. DNSChanger路由器DNS劫持木马 新版本正在攻击家庭及小企业路由器 企图推送广告...
  11. 极简潮流!最新海报欣赏给你设计灵感
  12. Python爬虫教程:简书文章的抓取与存储
  13. 云安全之虚拟机安全监控
  14. ElasticSearch权威指南学习(索引管理)
  15. 京东动态页面爬虫 scrapy+selenium
  16. qmc0文件怎么转换mp3_音频转换器哪个好 怎么剪切MP3音频制作手机铃声
  17. GRE tunnel 2
  18. 小米路由器R4 TTL刷不死Bread第三方固件写入升级
  19. html中网站片头制作利器,视频开头特效制作 视频播放时简单的片头制作
  20. gnu assembler最新官方手册和.macro介绍

热门文章

  1. 浅入深出之Java集合框架(上)
  2. python基础——使用__slots__
  3. 绘图: Python matplotlib简介
  4. [HDU3691 Nubulsa Expo]
  5. VC6里面的中文名字或者注释复制乱码解决
  6. 《R数据可视化手册》一1.4 从Excel文件中加载数据
  7. C# 窗体间传值(使用委托与自定义事件)
  8. java实现循环链表
  9. MongoDB 与传统数据库的对比
  10. 评估创业项目的十大标准