java学习(145)

1.Java保存的文件名必须与类名一致;

2.如果文件中只有一个类,文件名必须与类名一致;

3.一个Java文件中只能有一个public类;

4.如果文件中不止一个类,文件名必须与public类名一致;

5.如果文件中不止一个类,而且没有public类,文件名可与任一类名一致。

protected:自身,子类及同一个包中类可以访问。相比c++倒是多了个,访问路径。

default(默认):同一包中的类可以访问,声明时没有加修饰符,认为是friendly。c++默认是protected吧,但是也分编译器。

Android

  • android:gravity 属性是对该view中内容的限定.比如一个button 上面的text. 你可以设置该text 相对于view的靠左,靠右等位置.

    android:layout_gravity是用来设置该view相对与父view 的位置.比如一个button 在linearlayout里,你想把该button放在linearlayout里靠左、靠右等位置就可以通过该属性设置.

  • dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA 推荐使用这个,不依赖像素。

    dp: dip是一样的

    px: pixels(像素). 不同设备显示效果相同,一般我们HVGA代表320x480像素,这个用的比较多。

    pt: point,是一个标准的长度单位,1pt=1/72英寸,用于印刷业,非常简单易用;

    sp: scaled pixels(放大像素). 主要用于字体显示best for textsize。

eclipse

中断debug,的在左上的debug窗口,选择总进程,再点击红色的中断。

修改重启的话一定要在java页面点击重启,在xml页面点击重启会不动,跑都不跑。

仅下twicetest

左上是一个activebar

先走main的oncreate,main里面新建NavigationDrawerFragment,所以就走NavigationDrawerFragment的oncreate,oncreateview,添加menu,item等布局。
main就获取title,把title设置到activebar里面去

程序先加载activemain,里面有FrameLayout和fragment
实在不明白前者为何没有,后者就是那个NavigationDrawerFragment的界面。??????????

main会在ondrawn里面建立fragment_main,Navigatfragment会在每次点击时显示,俩个布局平分了整个屏幕。

回调和监听

内部监听、外部监听、activity监听、匿名监听(直接new就开写的那个)

xml定义监听函数

回调函数
先调用事件监听器->对应控件回调方法->activity对应的回调方法。(如果其中有一个返回false就终止)

target sdk compile sdk

v7是5.0以后才有的,所以,compile sdk注意用23(因为我sdk manager里面5.0以后只有23)。不然会资源错误,报r的错误,对了不需要v7支持记住要mini sdk>=14

targetSdkVersion相对复杂一些,如果设置了此属性,那么在程序执行时,如果目标设备的API版本正好等于此数值,他会告诉Android平台:此程序在此版本已经经过充分测,没有问题。不必为此程序开启兼容性检查判断的工作了。也就是说,如果targetSdkVersion与目标设备的API版本相同时,运行效率可能会高一些。

但是,这个设置仅仅是一个声明、一个通知,不会有太实质的作用,比如说,使用了targetSdkVersion这个SDK版本中的一个特性,但是这个特性在低版本中是不支持的,那么在低版本的API设备上运行程序时,可能会报错:java.lang.VerifyError。也就是说,此属性不会帮你解决兼容性的测试问题。你至少需要在minSdkVersion这个版本上将程序完整的跑一遍来确定兼容性是没有问题的。(这个问题确实让人头疼)

在default.properties中的target是指在编译的时候使用哪个版本的API进行编译。

综上,上面的四个值其实是作用于不同的时期:
target API level是在编译的时候起作用,用于指定使用哪个API版本(SDK版本)进行编译。
minSdkVersion和maxSdkVersion是在程序安装的时候起作用,用于指定哪些版本的设备可以安装此应用。
targetSdkVersion是在程序运行的时候起作用,用于提高指定版本的设备上程序运行体验。

这四个数值在程序编译时也没有严格的检查,比如说,你可以将minSdkVersion设置的比maxSdkVersion还大,他会自动忽略掉错误的maxSdkVersion。

但是在Ubuntu下,用Android studio就不存在这些问题,target和source会被一起默认设置为当前platform。

多线程

默认情况下Handler会与其被定义时所在线程的Looper绑定,比如,Handler在主线程中定义,那么它是与主线程的Looper绑定。 mainHandler = new Handler() 等价于new Handler(Looper.myLooper()). Looper.myLooper():获取当前进程的looper对象,类似的 Looper.getMainLooper() 用于获取主线程的Looper对象。

所以handler一开始就被绑定了。变定义就好了。

// //