实习周记之第二篇

Posted by Chejdj Blog on August 21, 2018

本来打算每周都更新一下自己学到的东西,但是这几个礼拜和高中,大学同学聚完之后,大家新来到北京就一起聚聚,然后内心也开始懒惰起来,还是要继续跟上。

Theme和style的解释和顺序

Theme和Style之前确实听过,但是用的地方比较少,所以了解的也比较少,最近自己需要写工作上的需求要用到这个style,就去认真的了解一下(不熟悉不敢用)
Style: 风格是一系列的Attr集合用来定义一个View的样式,比如hegiht,width,background,textsize等等,注意style只是单独作用于一个单独的View.
Theme: 也是风格,但是里面可以包含多种风格,和Style是一种包含和被包含的关系,Theme可以为整个Application指定主题,也可以为Activity单独指定主题,还可以为Button,TextView指定主题.

View的四个构造函数

之前确实并没有注意到View这几个构造函数的意思和调用时机,现在来看看

1
2
3
4
public DesignView(Context context)
public DesignView(Context context,AttributeSet attrs)
public DesignView(Context context,AttributeSet attrs,int defStyleAttr)
public DesignView(Context context,AttributeSet attrs,int defStyleAttr,int defStyleRes)
  1. Context: 它是一个抽象类,我们俗称上下文,就是当前对象的在程序中所处的一种环境,Activity,Service,Application等都是该类的一个实现。Android源码里面从英文翻译过来就是:Context提供了关于应用环境全局信息的接口。它是一个抽象类,它的执行被Android系统所提供。它允许获取以应用为特征的资源和类型,是一个统领一些资源(应用程序环境变量等)的上下文。就是说,它描述一个应用程序环境的信息(即上下文);是一个抽象类,Android提供了该抽象类的具体实现类;通过它我们可以获取应用程序的资源和类(包括应用级别操作,如启动Activity,发广播,接受Intent等)
  2. AttributeSet 属性集,用来保存你在XML文件中对于一些控件指定属性的值(android:layout_width之类的),当然用的比较多还是自己自定义属性集的获取
  3. defStyleAttr:看字面的意思是Style的属性值,官方的解释是说这是一个在当前主题中的一个属性,这个属性是对一个style资源的引用,这个style资源是可以给TypedArray提供默认值的,为0就不会去寻找默认值
  4. defStyleRes: 一个对TypeArray支持默认值的style的资源ID,但是它只能在defStyleAttr或则defStyleAttr不能够在主题中找到时才能使用.

View的4个构造函数时机

第一个函数 一般在java代码中声明一个View是所有
第二个函数 我们在自定义View,并且在布局文件中引用会调用
后面两个函数调用如果需要自己的View随着Theme变化而变化就需要利用后面两个构造函数(如果完全自己自定义View需要自己手动调用,一般在第二个构造函数中)
但是我们知道对于一个View的属性,比如 layout_width可以在多个地方设置: 可以写在XML文件中,可以在XML中引用Style在Style定义,还可以在主题中定义。
当同一个属性在多个地方赋值的时候系统的优先级为: xml定义>Style定义>defStyleAttr>defStyleRes>Theme主题中定义
(这里需要注意 dfStyleRes使用的条件是defStyleAttr为空或者找不到)
我们在实际开发中,如何使用?

1
2
3
4
5
public DesignView(Context context,AttributeSet attrs){
   this(context,attrs,R.style....) //该style需要在Theme中写明,defStyleRes一样
}
public DesignView(Context context,AttributeSet attrs,int defStyleAttr)

一些基础控件就是自己在第二个函数中调用第三个函数 比如TextView 默认第三个Style为主题中的

@style/...

自定义View方面

主要就是了解父类的MeasureSpec和子类的layoutparams决定子类的MeasureSpec,View的layout和measure过程,这些在Andorid艺术探索那本书讲的很清楚,先埋个坑,后面再填

题外话

时间真的很快,记得在实习之前本来还在幻想着,白天工作,晚上学习一会儿,可是真正到了实习的时候,每天晚上在公司呆到8点,然后到住的地方8:40,洗个澡然后就不想学了,感觉还是有点累的,实习第一感觉大家都很强啊,带我的导师也很好,各种分享,希望自己能够更加积极一点,本来这篇文章上个礼拜发的,一直找不到时间来写,真的以后要养成一个好一点的习惯!!最近,秋招已经开始半个月了,感觉好快啊,感觉春招找实习刚结束就开始了秋招,本来想静下心慢学习的,看样子要有紧迫感,加快自己的学习了。