首页 > 代码库 > Android学习笔记(四)

Android学习笔记(四)

2.      Settings.System.getInt(ContentResolvercr, String name, int def)方法从系统设置(settings)参数的集合中取出名称为name的参数的参数值,如果系统设置中没有该参数,则返回默认值def。

3.      Activity的函数setVolumeControlStream(intstreamType)用于设置所在Activity中音量控制键控制的音频流,一般在onCreate()函数中设定。其中,streamType是需要调整音量的类型,有以下几种:

     ●AudioManager.STREAM_MUSIC    媒体音量,即音频和视频音量

     ●AudioManager.STREAM_RING      手机铃声音量

     ●AudioManager.STREAM_ALARM    手机警报音量

     ●AudioManager.STREAM_NOTIFICATION     窗口顶部状态栏通知声音量

     ●AudioManager.STREAM_SYSTEM     系统声音音量

     ●AudioManager.STREAM_VOICECALL   通话声音的音量

     ●AudioManager.STREAM_DTMF   双音双频的音量

4. public Intent registerReceiver(BroadcastReceiverreceiver, IntentFilter filter)的作用:

  Resgister aBroadcastRecevier to be run in the main activity thread. The receiver will becalled with any broadcast Intent that matches the filter in the mainapplication thread.

5. boolean android.app.Activity.isFinishing()函数的使用:

  Check to seewhether this activity is in the process of finishing, either because you calledfinish() on it or someone else has requestedthat it finished. This is often used inonPause()to determine whether the activity is simply pausing or completely finishing. Ifthe activity is finishing, returns true; else return false.

6. java.lang.ref.WeakReference类简介

  在写一个Java程序时,想要随时获取某个对象的信息,如对象什么时候会被垃圾回收机制回收,可以使用Weak Reference,但不能使用Reference,如果使用Reference,则该对象永远不能被清除。但使用Weak Reference能够随时取得对象的信息,但不影响对该对象的垃圾回收。使用方式例子:

    A obj= newA();

    WeakReferencewr= new WeakReference(obj);

    obj= null;

    …

    //等待一段时间,obj对象会被垃圾回收

    If(wr.get()==null){

       System.out.println(“obj已被清除”);

}else{

    System.out.println(“obj没被清除”);

}

  通过get()方法获取WeakReference所指的对象。

7. View.setVisibility()参数有三个不同值: 

     ● View.VISIBLE      该视图可见

     ● View.INVISIBLE    该视图不可见,但这个View在ViewGroup中仍保留它的位置,不重新layout

      ●View.GONE         该视图不可见,但这个View在ViewGroup中不保留位置,重新layout,后面的view就会取代它的位置

8. ListView的android:cacheColorHint属性和android:listSelector属性

  ● ListView的默认背景是和系统窗口一样的透明色,如果给ListView加上图片或者背景色,滚动时ListView会黑掉,

因为,滚动时列表里面的view重绘时,用的依旧是系统默认的透明色,颜色值为#FF191919。要改变这种情况,

只需调用ListView的setCacheColorHint(0),颜色值设为0,或者xml文件中ListView的属性android:cacheColorHint=

“#00000000”。如此,滚动重绘View时便不会有背景颜色。

                                                     

 ● 当单击ListView的item是i,默认会显示选中的item为橙黄底色。如果需要去掉这种效果,则可以使用属性android:listSelector属性。如果设置为android:listSelector= “#00000000”或者android:listSelector=

“@android:color/transparent”,则在单击ListView的item时便不会有任何现象了。

                                                   

9. android单位px, dip(dp), sp, dpi简介

  ●px (pixels): 像素,是屏幕上实际的像素点单位。一般不使用该单位。

  ●dip/dp (device independent pixels): 设备独立像素,与设备屏幕无关

  ●sp(scaled pixels): 类似dp,主要用于处理字体的大小

  ●dpi(dot per inch): 屏幕像素密度,每英寸的像素的个数。该值越大,屏幕的精细度越高,屏幕看起来越清楚。

10. @Override的使用

  @Override是伪代码,表示重写(当然不写也可以),不过写上有以下好处:

   ● 可以当注释用,方便阅读

   ● 编译器可以验证@Override下面的方法名是否是你父类中有的。如果没有,则报错

11. android系统的TouchEvent处理机制: android系统中的每个View的子类都具有如下三个与TouchEvent处理密切相关

的方法:

● public booleandispatchTouchEvent(MotionEvent ev): 用来分发TouchEvent,该MotionEvent能够记录触发点的坐标

● public booleanonInterceptTouchEvent(MotionEvent ev): 用来拦截TouchEvent

● public booleanonTouchEvent(MotionEvent ev): 用来处理TouchEvent事件

当TouchEvent发生时,Activity首先将TouchEvent传递给最顶层的View,TouchEvent最先到达最顶层view的dispatchTouchEvent,然后由该dispatchTouchEvent对TouchEvent进行分发,如果dispatchTouchEvent返回true,则交给这个view的onTouchEvent处理,如果dispatchTouchEvent返回false,则交给这个view的interceptTouchEvent方法来决定是否要拦截该事件,如果该interceptTouchEvent返回true,则交给它的onTouchEvent来处理,如果返回false,则传递给子view,由子view的dispatchTouchEvent再开始这个事件的分发。如果事件传递到某一层的子view的onTouchEvent上,该方法返回false,则该事件会从这个view往上传递,都是由onTouchEvent来接收。而如果传递到最上面的onTouchEvent也返回false,该事件便会消失,而且接收不到下一次事件。

12. Activity.finish()简介

该方法在Activity动作完成后,或者需要关闭Activity的时候被调用。当该方法被改用后,系统将最上面的Activity移出Task栈,但没有及时调用onDestory()方法,因而其占用的资源没有被及时释放。因为移出了栈,所以当点击手机上面的“back”按键时,不会再找到这个Activity。

13. AndroidWebViewClient与WebChromeClient的区别

  ● WebViewClient: 主要用于帮助WebView处理各种通知、请求事件。如: onl oadResource,onPageStart, onPageFinish, onReceiveError, onReceivedHttpAuthRequest

  ●WebChromeClient: 主要用于辅助WebView处理Javascript的对话框、网站title、加载进度等。如: onCloseWindow(关闭WebView), onCreateWindow,onJsAlert (WebView上alert无效,需要定制WebChromeClient处理弹出), onJsPrompt, onJsConfirm,onProgressChanged, onReceivedIcon, onReceivedTitle等。

  实际使用时,如果WebView只是用来处理一些html的页面内容,只用WebViewClient即可,如果需要更丰富的处理

效果,比如JS、进度条等,就要用到WebChromeClient。

14. WeakReference类

WeakReference weakref = new WeakReference(ref);
 这样 weakref 就是 ref 指向对象的一个 weakreference。要引用这个 weakreference 指向的对象可以用 get 方法。    把对象的 weak reference 放入 Hashtable 或者缓存中,当没有 strong reference 指向他们的时候,对象就可以被垃圾收集器回收了。实际上,有一个 WeakHashMap 就是专门做这个事的。一旦WeakReference使用get方法返回null的时候,它指向的对象已经变成了垃圾,这个weakref对象也没什么用 处了。这就需要有一些清理工作了。而ReferenceQueue类就是做这个的,要是你向ReferenceQueue类传递了一个 WeakReference的构造方法,那么当引用所指的对象成为垃圾时,这个引用的对象就会被自动插入到这个引用队列中。你可以在一定时间间隔内处理这个队列。

15. ViewStub组件

  ViewStub组件是一个隐藏的、不占用内存空间的视图对象,它可以在运行时延迟加载布局资源文件。当ViewStub可见,或者调用inflate()函数时,才会加载这个布局资源文件。该ViewStub在加载视图时在父容器中替换它本身。因此,ViewStub会一直存在于视图中,直到调用setVisibility(int) 或者inflate()为止。ViewStub的布局参数会随着加载的视图数一同被添加到ViewStub父容器。同样,你也可以通过使用 inflatedId属性来定义或重命名要加载的视图对象的Id值。当inflate()被调用, 这个ViewStub被加载的视图替代并且返回这个视图对象。这使得应用程序不需要额外执行findViewById()来获取加载视图的引用。

效果图如下:

  1).在ButtonOne和ButtonTwo之间存在一个ViewStub布局,如下图:

                                                                                                            

  2).单击ButtonOne后渲染ViewStub中的布局,如下图:

                                                                                                            

 

Android学习笔记(四)