美文网首页
Android开发笔记四

Android开发笔记四

作者: 0a61c9729dbc | 来源:发表于2016-05-24 21:47 被阅读0次

    一、dp、sp和px

    PX :像素点

    dp:与像素相关的单位

    sp:同dp,通常用来修饰文字

    文字尺寸一律用sp,非文字一律使用dp。

    偶尔使用px。例如需要在屏幕上画一条细的分割线:1px

    (用<View></View>)

    二、Inflater

    inflater就相当于将一个xml中定义的布局找出来。

    LayoutInflater

    得到LayoutInflater的三种方法:

    1、getLayoutInflater()

    2、getSystemService(LAYOUT_INFLATER_SERVICE)

    3、LayoutInflater.form(Context)

    得到inflater后可以读视图:

    View view = inflate(R.layout.xml文件,null)

    得到视图后可以找控件:

    view.findViewById()

    三、提取布局的属性theme&style

    theme是针对窗体级别的,改变窗体样式;

    style是针对窗体元素级别的,改变指定控件或者Layout的样式。

    抽象view的共同属性

    可继承

    在style.xml文件中可以自定义样式

    红色全出来是自定义部分 红色部分是引用的地方

    四 View学习

    View是如何工作的

    第一步 view构造器 初始化

    在新建的view类中要添加构造器并且在构造器中要初始化

    在下图是在View构造器中进行初始化

    第二步 用onMesure()定大小

    第三步用onLayout()定位置

    第四步用onDraw()绘制

    第五步用invalidate()刷新

    五 自定义控件的形式

    继承已有的控件来实现自定义控件

    通过继承一个布局文件实现自定义控件

    同继承view类来实现自定义控件

    开发自定义控件的步骤:

    1、了解View的工作原理

    2、 编写继承自View的子类

    3、 为自定义View类增加属性

    4、 绘制控件

    5、 响应用户消息

    6 、自定义回调函数

    六 Fragment学习

    1、Fragment 相当于模块化的一段activity

    2、具有自己的生命周期,接收自己的事件

    3、在activity运行时被添加或删除

    七 Handler学习

    1、Handler

    当应用程序启动时,Android首先会开启一个主线程(也就是UI线程),主线程为管理界面中的UI控件,进行事件分发。

    主要接受子线程发送的数据, 并用此数据配合主线程更新UI。

    当应用程序启动时,Android首先会开启一个主线程 (也就是UI线程) , 主线程为管理界面中的UI控件, 进行事件分发, 比如说, 你要是点击一个 Button ,Android会分发事件到Button上,来响应你的操作。  如果此时需要一个耗时的操作,例如: 联网读取数据,或者读取本地较大的一个文件的时候,你不能把这些操作放在主线程中,如果你放在主线程中的话,界面会出现假死现象, 如果5秒钟还没有完成的话,会收到Android系统的一个错误提示  "强制关闭"。  这个时候我们需要把这些耗时的操作,放在一个子线程中,因为子线程涉及到UI更新,Android主线程是线程不安全的, 也就是说,更新UI只能在主线程中更新,子线程中操作是危险的。 这个时候,Handler就出现了,来解决这个复杂的问题,由于Handler运行在主线程中(UI线程中),它与子线程可以通过Message对象来传递数据, 这个时候,Handler就承担着接受子线程传过来的(子线程用sedMessage()方法传弟)Message对象,(里面包含数据),把这些消息放入主线程队列中,配合主线程进行更新UI。

    用handler发送消息,首先先取得一个Message,然后对里面的参数进行赋值,然后用handler的sendMessageDelayed将message延迟发送。

    发送出去消息后,然后用handleMessage接收消息,判断what来识别是哪一个message,然后对消息进行出处理。

    2、Message和MessageQueue(消息队列)

    Message:消息,其中包含了消息ID,消息处理对象以及处理的数据等,由MessageQueue统一列队,终由Handler处理。

    MessageQueue:消息队列,用来存放Handler发送过来的消息,并按照FIFO规则执行。当然,存放Message并非实际意义的保存,而是将Message以链表的方式串联起来的,等待Looper的抽取。

    3、Looper(消息泵)

    Looper:消息泵,不断地从MessageQueue中抽取Message执行。因此,一个MessageQueue需要一个Looper。

    Thread:线程,负责调度整个消息循环,即消息循环的执行场所。

    相关文章

      网友评论

          本文标题:Android开发笔记四

          本文链接:https://www.haomeiwen.com/subject/hqnmrttx.html