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:

 @Override
public 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方法。我,草!!!妈的,搞这么一层又一层干甚。不写了,且听下回分解。

LinearLayout具体解释一:LinearLayout的简单介绍的更多相关文章

  1. kafka具体解释一、Kafka简单介绍

    背景:      当今社会各种应用系统诸如商业.社交.搜索.浏览等像信息工厂一样不断的生产出各种信息,在大数据时代,我们面临例如以下几个挑战: 怎样收集这些巨大的信息 怎样分析它 怎样及时做到如上两点 ...

  2. LinearLayout具体解释二:LinearLayout的创建过程以及状态全程解析

    正在撰稿中,请稍等...

  3. 《HTML 5网页开发实例具体解释》样章、内容简单介绍、前言

    http://spu.jd.com/1167757597.html http://product.dangdang.com/23484942.html 样章 http://download.csdn. ...

  4. Linux守护进程简单介绍和实例具体解释

    Linux守护进程简单介绍和实例具体解释 简单介绍 守护进程(Daemon)是执行在后台的一种特殊进程.它独立于控制终端而且周期性地执行某种任务或等待处理某些发生的事件.守护进程是一种非常实用的进程. ...

  5. Cloudera impala简单介绍及安装具体解释

    一.Impala简单介绍 Cloudera Impala对你存储在Apache Hadoop在HDFS,HBase的数据提供直接查询互动的SQL.除了像Hive使用同样的统一存储平台,Impala也使 ...

  6. Android中Intent具体解释(二)之使用Intent广播事件及Broadcast Receiver简单介绍

    通过第一篇的解说,我们已经看到了怎样使用Intent来启动新的应用程序组件,可是实际上他们也能够使用sendBroadcast方法来在组件间匿名的广播消息. 作为一个系统级别的消息传递机制,Inten ...

  7. 【Android 应用开发】 ActionBar 样式具体解释 -- 样式 主题 简单介绍 Actionbar 的 icon logo 标题 菜单样式改动

    作者 : 万境绝尘 (octopus_truth@163.com) 转载请著名出处 : http://blog.csdn.net/shulianghan/article/details/3926916 ...

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

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

  9. Android开发自学笔记(Android Studio)—4.界面编程与View组件简单介绍

    一.引言 Android应用开发最重要的一份内容就是界面的开发,无论你程序包含的内容多么优秀,如若没有一个良好的用户交互界面,最终也只是会被用户所遗弃.Android SDK提供了大量功能丰富的UI组 ...

随机推荐

  1. hdu 1070Milk

    地址链接:http://acm.hdu.edu.cn/showproblem.php?pid=1070 题意:多看几遍,学着静下来心去看英文题 代码: #include<bits/stdc++. ...

  2. ThinkPHP框架配置自定义的模板变量(十)

    原文:ThinkPHP框架配置自定义的模板变量(十) 模板替换(手册有详细介绍对应的目录) __PUBLIC__:会被替换成当前网站的公共目录 通常是 /Public/ __ROOT__: 会替换成当 ...

  3. thinkphp 3.2.3 入门示例2(URL传参数的几种方式)

    原文:thinkphp中URL传参数的几种方式 在thinkphp中,url传参合asp.net中原理类似,下面就单个参数和多个参数传递方式进行一个简单讲解 1.传单个参数 单个参数这种比较简单,例如 ...

  4. java中Hashtable中的t为什么是小写(转)

    因为在很多年前刚学java的时候用到Hashtable的时候比较好奇为什么第二个t是小写,这不符合sun的风格啊,整个jdk都是标准驼峰,于是带着这个疑问翻过 很多书,看多很多资料,最后的结论是: H ...

  5. 关于索引删除的策略IndexDeletionPolicy

    关于索引删除的策略IndexDeletionPolicy . public IndexWriter(Directory d, Analyzer a, boolean create)          ...

  6. Xcode 4.6.2 运行次数为偶数程序崩溃问题

    如果你的MAC 系统升级到10.8.4  Xcode升级到4.6.2,在工程运行第二次.第四次.第六次 ... 的时候程序就会崩溃 无论是新建的模板工程也会这样,这个属于系统BUG,在stackove ...

  7. 跨域GET、POST请求

    跨域GET.POST请求的小结 重点:跨域POST大量数据: JQuery:$.ajax/$.getJSON支持jsonp格式的跨域,但是只支持GET方式,暂不支持POST: CORS:w3c关于跨域 ...

  8. 在html中写python代码的语法和特点-----基于webpy的httpserver

    在html文件里写python语法的内容,的注意事项: 1:python程序中的变量通过以下方法传入到html: 1:通过全局变量 :全局变量是不须要用$def with语法实现传递的,仅仅要定义了 ...

  9. 基于Grunt的版本号构建系统新手教程

    作者:zhanhailiang 日期:2014-10-12 1. 安装nodejs,npm,grunt-cli.參见<Windows环境下安装nodejs+npm+grunt-cli工具> ...

  10. Cocos2dx项目启程一 之 封装属于我的精灵类

    给自己的假期就快要结束了,该要做点事情了,哪怕简单的不好的也比不做的有意义. /*#pragma once 保证头文件只被编译一次 #pragma once是编译器相关的,就是说即使这个编译系统上有效 ...