由于公司做的软件是运行在特定pda设备上,因此开发时,我们不需要考虑屏幕适配等问题,毕竟如果考虑屏幕适配问题的话,需要美工多做几套图片来,而公司美工又少,因此屏幕适配问题就没有考虑过。只是前几天有人问我Android  App开发时屏幕适配问题,我只知道可以在Res文件夹下多建立几个drawable文件夹,运行时手机会根据屏幕的尺寸来自动寻找合适的图片,或者在layout布局文件里设置权重layout_widget来实现,并且设置最大高度和最小高度。显然,我的回答无法让人家满意。汗一个。虽然自己工作中用不到,但这些基础些的知识,还是要掌握好的。现在有空了,我赶紧找下相关资料,看看大家都是怎么实现屏幕适配的。



    1.layout_weight适配方式,和我现在常用的方式一样。设置layout_width="0dp",则layout_weight越大,该空间所占的空间就越大。但如果layout_width="match_parent"的话,设置起来就比较麻烦了。假如有三个控件,它们的权重分别是1,1,1,则显示时,它们所占空间比例是1:1:1;但如果权重设置为1:2:1的话,则第三个控件无法显示,第一个控件和第二个控件显示比例为1:1;如果权重设置为1:2:3,则第三个控件仍是无法显示,前两个控件显示比例为2:1;计算起来挺麻烦的。但如果设置它们的layout_width="0dp"的话,则三个控件的比例依次为1:1:1;1:2:1;1:2:3;这样使用起来方便多了。



2,图片资源方面 


   需要根据dpi值准备5套图片资源: 


   drawable:主要放置xml配置文件或者对分辨率要求较低的图片 


drawalbe-ldpi:低分辨率的图片,如QVGA (240x320) 


drawable-mdpi:中等分辨率的图片,如HVGA (320x480) 


drawable-hdpi:高分辨率的图片,如WVGA (480x800),FWVGA (480x854) 


drawable-xhdpi:至少960dp x 720dp 


Android有个自动匹配机制去选择对应的布局和图片资源。 


  系统会根据机器的分辨率来分别到这几个文件夹里面去找对应的图片。 在开发程序时为了兼容不同平台不同屏幕,建议各自文件夹根据需求均存放不同版本图片。



  3.layout方面:



 在res目录下创建不同的layout文件夹,比如layout-640x360,layout-800x480,所有的layout文件在编译之后都会写入R.Java里,而系统会根据屏幕的大小自己选择合适的layout进行使用。但这样的话也使得程序员工作量增加。使用这种方法的话,配置文件一定要加上这段配置代码,不然有时可能会出问题


    <supports-screens android:largeScreens="true"


                android:normalScreens="true" android:anyDensity="true" />



根据物理尺寸的大小准备5套布局: 


layout(放一些通用布局xml文件,比如界面顶部和底部的布局,不会随着屏幕大小变化,类似windos窗口的title bar), 


layout-small(屏幕尺寸小于3英寸左右的布局), 


layout-normal(屏幕尺寸小于4.5英寸左右), 


layout-large(4英寸-7英寸之间), 


layout-xlarge(7-10英寸之间) 



4.在res文件夹下,根据尺寸分别建立多个values文件夹,在里面的dimens里设置屏幕分辨率在该情况下,控件宽高等。然后在layout文件中引用。这样的优点是手机会根据屏幕情况从对应values中获取dimens数据。



5.在Java代码中设置控件的尺寸。



               DisplayMetrics displayMetrics = new DisplayMetrics();


                getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);


                int screenWidth= displayMetrics.widthPixels;


                int screenHeight= displayMetrics.heightPixels;



   screenWidth和screenHeight就是屏幕的宽高。设置控件的宽高时,既可以使用setWidth(int),setHeight(int)也可以使用setLayoutParams(new LayoutParams( int width,int height));来实现。不过好像有的控件不支持setWidth直接设置,而使用LayoutParams设置的话,所有控件都可以。





此外,还可以在设置控件宽高度时使用dp,文字大小用sp。Symbian 和传统的J2ME 有为一款应用提供多个分辨率版本的办法,用户根据自己的需求下载安装相应的可执行文件。针对每一种屏幕单独开发应用程序不失为一种好方法,但是目前Google Market 对一个应用程序多个分辨率版本的支持还不完善,因此开发时我们还是需要尽可能使用一个apk 文件适应多个分辨率。