Android群英传笔记系列一view的介绍

  学习完第一行代码后,继续学习Android群英传,希望能坚持下去,好好学习完这本书,并及时做好相关笔记,巩固相关知识;

一. View的介绍:

1`.我们先来看下view树结构:

2.树结构内容:

a.viewparent是整棵树的核心,它统一调度和分配所有的交互管理事件。

b.控件分为viewgroup和view两种控件,viewgroup作为父控件可以包含多个vie       w控件。

c.我们知道在使用控件前都要通过findViewById的方法来实例化控件,那么在树结构中,实际上表现为通过树的深度优先遍历来查找到对应的元素。

3.UI界面构架图:

4.UI界面构架图内容:

a.实际上每个activity都包含一个window对象,而window对象是通过PhoneWindow来实现的。

b.PhoneWindow又将一个DecorView设置为整个应用窗口的根View。(简单的来说就是,我们所看到的整个手机屏幕内容就是整个的DecorView);

c.然后在我们手机应用中,一般含有两个view,一个是标题栏,即TitleView,另一个就是呈现内容的view,即ContentView.(当然,我们也可以通过一些办法隐藏,比如在setContentView()之前使用:

requestWindowFeature(Window.FEATURE_NO_TITLE)的方法即可。)

d.界面的显示过程:当程序在onCreate()方法中调用setContentView方法后,ActivityManagerService会回调onResume方法,系统便会将整个DecorView添加到PhoneWindow中。

二. View的测量:

1.测量的模式有三种:

EXACTLY模式:指的是精确值模式,比如我们设置layout_width=30dp,那么这种便属于精确值模式。

AT_MOST模式:指的是最大值模式,比如我们使用的wrap_content便是属于这种模式,允许随着内容的变化而变化,只要不超过父控件的所允许的最大尺寸即可。

UNSPECIFIED模式:这个是没有限制的模式,想要多大就可以多大,一般是在自定义view中使用。

2.关于重写onMeasure()方法:

a.为什么要重写onMeasure方法?

因为view类默认的onMeasure方法只支持EXACTLY模式,所以如果我们想要用指定wrap_content的大小的话,就必须要重写该方法。

b.重写onMeasure的过程:

(1)创建一个类继承至view:

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}

我们会看到这样的一个初始的onMeasure函数,然后我们来看下super.OnMeasure的方法:

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    setMeasuredDimension(getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec),
            getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec));
}

所以在这里我们要重写setMeasuredDimension这个函数:我们再下面添加这样一句话

setMeasuredDimension(measureSize(200,widthMeasureSpec),measureSize(200,heightMeasureSpec));
我们来看下这句话的含义,实际上我们自定义了一个measureSize的函数,然后分别传入两个参数,第一个为默认值,第二个实际值。然后我们来看下这个自定义函数是如何实现的:
private int measureSize(int defaultSize,int measureSpec){
    int result=0;//定义result来作为返回值
    int specMode=MeasureSpec.getMode(measureSpec);//获取到测量的模式
    int specSize=MeasureSpec.getSize(measureSpec);//获取到测量值
    if (specMode==MeasureSpec.EXACTLY){//如果为精确测量,返回测量值即可
        result=specSize;
    }else{
        result=defaultSize;//如果为其他两种模式,设置为默认值
        if (specMode==MeasureSpec.AT_MOST){//如果为最大值模式,我们要获取到默认值和测量值中最小的值
            result=Math.min(result,specSize);
        }
    }
    return result;
}

最后我们在xml文件中引用这个自定义的view:

<main.view.com.view.viewTest
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="#ff0000"
 />
				
时间: 2024-10-14 00:42:40

Android群英传笔记系列一view的介绍的相关文章

Android群英传笔记系列三 view的自定义:实现一个模拟下载

1.实现效果:动态显示进度(分别显示了整个的动态改变的过程,然后完成后,弹出一个对话框)       2.实现过程:可以分为绘制一个圆,圆弧和文本三部分,然后在MainAcitivity中通过线程模拟下载进度. a.定义一个类继承至view,然后添加其构造函数,记得一定要添加含有Attributset参数的构造函数; b.定义和初始化一些数据: private int mCircleXY; private int mWidth; private float mRadius; private Pa

Android群英传笔记系列二view的绘制(一)

三 .view的绘制 1.  使用方法:通过继承view并重写它的onDraw()方法来完成绘图. 2.  具体实现: a.先定义一个Canvas对象,这个对象类似于一个花板,定义方法如下:Canvas canvas=new Canvas(bitmap); b.我们可以看到在定义Canvas对象时,我们传入了一个bitmap对象,那么这个bitmap的作用是什么呢?其实bitmap的作用是存储所有绘制在Canvas上的像素信息.比如: canvas.drawBitmap(bitmap1,0,0,

Android群英传笔记——第十二章:Android5.X 新特性详解,Material Design UI的新体验

Android群英传笔记--第十二章:Android5.X 新特性详解,Material Design UI的新体验 第十一章为什么不写,因为我很早之前就已经写过了,有需要的可以去看 Android高效率编码-第三方SDK详解系列(二)--Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能 这一章很多,但是很有趣,也是这书的最后一章知识点了,我现在还在考虑要不要写这个拼图和2048的案例,在此之前,我们先来玩玩Android5.X的新特性吧!

Android群英传笔记——摘要,概述,新的出发点,温故而知新,能够为师矣!

Android群英传笔记--摘要.概述,新的出发点,温故而知新.能够为师矣! 当工作的越久,就越感到力不从心了,基础和理解才是最重要的,所以买了两本书,医生的<Android群英传>和主席的<Android开发艺术探索>.主要是再全面点的把自己所学的知识消化,这样也就不枉自己天天熬夜学习了,如今群英传快看完了.准备又一次再看一遍,同一时候把笔记以博客的形式记录下来,这样或许更加的深刻,然后再消磨一下主席的那本书,这本书有视频解说,更加好,所以估计以后应该非常少再写其它的博客,只是工

Android群英传笔记——第四章:ListView使用技巧

Android群英传笔记--第四章:ListView使用技巧 近期也是比較迷茫.可是有一点点还是要坚持的,就是学习了.近期离职了,今天也是继续温习第四章ListView,也拖了事实上也挺久的了,listview可谓是老牌大将了,非常多的应用场景都要使用它,他也是我们用得最多的控件之中的一个了,尽管如今出来了一个RecyclerView,可是ListView的地位一时半会儿还是撼动不了的.这就促使我们更加应该去把他掌握了 一.Listview经常使用优化技巧 我们一步步来把ListView学习好

Android群英传笔记——第九章:Android系统信息和安全机制

Android群英传笔记--第九章:Android系统信息和安全机制 本书也正式的进入尾声了,在android的世界了,不同的软件,硬件信息就像一个国家的经济水平,军事水平,不同的配置参数,代表着一个android帝国的强弱,所以厂商喜欢打配置战,本节就要是讲 Android系统信息的获取 PackageManager的使用 ActivityManager的使用 Android安全机制 一. Android系统信息的获取 由于android手机的开源性,手机的配置各种各样,那些优化大师之类的东西

Android群英传笔记——第七章:Android动画机制和使用技巧

Android群英传笔记--第七章:Android动画机制和使用技巧 想来,最近忙的不可开交,都把看书给冷落了,还有好几本没有看完呢,速度得加快了 今天看了第七章,Android动画效果一直是人家中十分重要的一部分,从早期的Android版本中,由于动画机制和绘图机制的不健全,Android的人机交互备受诟病,Android从4.X开始,特别是5.X,动画越来越完善了,Google也开始重视这一方面了,我们本章学习的主要内容有 Android视图动画' Android属性动画 Android动画

Android群英传笔记——第八章:Activity与Activity调用栈分析

Android群英传笔记--第八章:Activity与Activity调用栈分析 开篇,我们陈述一下Activity,Activity是整个应用用户交互的核心组件,了解Activity的工作模式,生命周期和管理方式,是了解Android的基础,本节主讲 Activity的生命周期与工作模式 Activity调用栈管理 一.Activity Activity作为四大组建出现平率最高的组件,我们在哪里都能看到他,就让我们一起先来了解一下他的生命周期 1.起源 Activity是用户交互的第一接口,他

Android群英传笔记——第五章:Android Scroll分析

一.滑动效果是如何产生的 滑动一个View的本质其实就是移动一个View,改变其当钱所在的位置,他的原理和动画效果十分的相似,就是通过不断的改变View的坐标来实现这一效果,动态且不断的改变View的坐标,从而实现View跟随用户触摸滑动而滑动 但是在讲解滑动效果之前,需要先了解一下Android中窗口坐标体系和屏幕的触控事件--MotionEvent 1.Android坐标系 在物理学上,要描述一个物体的运动,就必须选定一个参考系,所谓滑动,正是相对于参考系的运动,在Android,系统将屏幕