Android窗口管理
在整个控件树的最顶端,是一个逻辑的树顶,ViewParent,在源码中的实现是ViewRoot(ViewRoot extends Handler implements ViewParent)。它是整个控件树和WindowManager之间的事件信息的翻译者。WindowManager是Android中一个重要的服务。它将用户的操作,翻译成为指令,发送给呈现在界面上的各个Window。Activity会将顶级的控件注册到WindowManager中,当用户真是触碰屏幕或键盘的时候,WindowManager就会通知到,而当控件有一些请求产生,也会经由ViewParent送回到WindowManager中。
drawable- hdpi、drawable- mdpi、drawable-ldpi的区别:
Android2.1(含)以后的版本中有drawable-mdpi、drawable-ldpi、drawable-hdpi三个目录,这三个目录主要是为了支持多分辨率。
dpi是“dot per inch”的缩写,每英寸像素数。
四种密度分类: ldpi (low), mdpi (medium), hdpi (high), and xhdpi (extra high)
一般情况下的普通屏幕:ldpi是120,mdpi是160,hdpi是240,xhdpi是320。
WVGA,HVGA,QVGA的区别
VGA是”Video Graphics Array”,显示标准为 640*480。
WVGA(Wide VGA)分辨率为 480*800
HVGA(Half VGA)即VGA的一半分辨率为 320*480
QVGA(Quarter VGA)即VGA非四分之一分辨率为240*320
drawable-(hdpi,mdpi,ldpi)和WVGA,HVGA,QVGA的联系
hdpi里面主要放高分辨率的图片,如WVGA (480×800),FWVGA (480×854) 长宽比 5:3
mdpi里面主要放中等分辨率的图片,如HVGA (320×480) 长宽比 3:2
ldpi里面主要放低分辨率的图片,如QVGA (240×320) 长宽比 4:3
系统会根据机器的分辨率来分别到这几个文件夹里面去找对应的图片。
在开发程序时为了兼容不同平台不同屏幕,我们可以上面制定长宽比裁剪图片,并确保有足够分辨率,并把它放入对应目录即可。
比如我们希望设置我们应用窗口的背景,则可以简单的用上面提到的规范裁剪对应的图片,然后做下面步骤即可:
1、将背景图片COPY到对应的drawable文件夹中,假设这里用的是bg1.png
2、修改main.xml,添加 android:background="@drawable/bg1" 即可:
3、这时候的布局文件如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:background="@drawable/bg1">
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="Hello Android"/>
- </LinearLayout>
【编辑推荐】