关于自适应屏幕方向和大小的一些经验
来源:互联网 发布:手机ktv唱歌软件 编辑:程序博客网 时间:2024/05/17 06:10
自适应主要会遇到两个大问题:横屏和竖屏的切换,以及分辨率大小不同。
一.当横屏切换成竖屏时,解决的办法:
在res目录下建立layout-port和layout-land两个目录,里面分别放置竖屏和横屏两种布局文件,当手机屏幕方向变化的时android系统会自动调用相应的布局文件。
当然还有办法就是不切换。要么都是横屏或者要么都是竖屏。可以在AndroidManifest.xml文件中设置,比如某个Activity设置为android:screenOrientation="portrait"这样就一直保持竖屏,如果设置为
android:screenOrientation="landscape"这样就一直保持横屏。
二.当遇到分辨率不同大小时,我们也会遇到三个问题:图片大小、布局、横屏和竖屏的切换。
图片问题好解决,到android2.0以后的api中,我们会发现原先的drawable文件夹变成了3个分别是drawable-hdpi、drawable-mdpi、drawable-ldpi。
第一个文件夹放高分辨率手机的图片,比如:854*480、800*480
第二个文件夹放中分辨率手机的图片,比如:480*320
第三个文件夹放低分辨率手机的图片,比如:320*240
关于布局和横屏切换成竖屏类似,也只需要在res目录下创建不同的layout文件夹,比如layout-480x320,layout-800x480,系统会根据屏幕的大小自己选择合适的layout来使用。
当横屏切换成竖屏时,就会遇到一个问题,我该怎么创建layout文件夹?
下图是我的工程里所有的layout文件夹:
layout 是适配高分辨率竖屏的布局文件夹
layout-land 是适配高分辨率横屏的布局文件夹
layout-land-320x240 是适配低分辨率横屏的布局文件夹
layout-land-480x320 是适配中分辨率横屏的布局文件夹
layout-port-320x240 是适配低分辨率竖屏的布局文件夹
layout-port-480x320 是适配中分辨率竖屏的布局文件夹
这样布局文件的适配就做完了。
我个人觉得先按照高分辨率的模拟器开发效果比较好,然后去做各个不同分辨率的适配。有时候我们布局时,低分辨率的布局可能需要修改下。
最后,还有一个问题如果是在java程序中写死的布局怎么办?
这个就很恼火了,需要判断屏幕的大小了,获取屏幕大小的代码如下:
Java代码
1
2 WindowManager windowManager = getWindowManager();
3 Displaydisplay = windowManager.getDefaultDisplay();
4 int screenWidth = display.getWidth();
5 int screenHeight = display.getHeight();
下面的代码片段是我自己在程序中写死布局使用的,仅供参考:
Java代码
6 Button cancelBtn =new Button(this);
7 if (screenWidth<320 || screenHeight<320)
8 cancelBtn.setLayoutParams(new LayoutParams(60,
9 android.view.ViewGroup.LayoutParams.WRAP_CONTENT));
10 elseif (screenWidth <480 &&screenHeight ==480)
11 cancelBtn.setLayoutParams(new LayoutParams(80,
12 android.view.ViewGroup.LayoutParams.WRAP_CONTENT));
13 elseif (screenWidth >480 && screenHeight ==480)
14 cancelBtn.setLayoutParams(new LayoutParams(160,
1 android.view.ViewGroup.LayoutParams.WRAP_CONTENT));
2 else
3 cancelBtn.setLayoutParams(new LayoutParams(120,
4 android.view.ViewGroup.LayoutParams.WRAP_CONTENT));
dip2px px2dip
5 // public static int dip2px(Contextcontext, float dipValue) {
6 // final float scale =context.getResources().getDisplayMetrics().density;
7 // return (int) (dipValue * scale +0.5f);
8 // }
9 //
10 // public static int px2dip(Context context, float pxValue) {
11 // final floatscale = context.getResources().getDisplayMetrics().density;
12 // return (int)(pxValue / scale + 0.5f);
13 // }
14 //int wdip__screen = px2dip(getApplicationContext(),
15 // getApplicationContext()
16 // .getResources().getDisplayMetrics().widthPixels);
17 // int hdip__screen =px2dip(getApplicationContext(),
18 // getApplicationContext()
// .getResources().getDisplayMetrics().heightPixels)- 关于自适应屏幕方向和大小的一些经验
- 关于自适应屏幕方向和大小的一些经验
- 关于自适应屏幕方向和大小的一些经验
- 关于自适应屏幕方向和大小的一些经验
- 转载关于自适应屏幕方向和大小的一…
- Android程序如何自适应屏幕的方向和大小
- Android程序如何自适应屏幕的方向和大小
- android自适应屏幕方向和大小
- Android: android自适应屏幕方向和大小
- Android自适应屏幕方向和大小
- android自适应屏幕方向和大小
- android自适应屏幕方向和大小
- android自适应屏幕方向和大小
- Android自适应屏幕方向、大小和分辨率
- Android自适应屏幕方向、大小和分辨率
- android自适应屏幕方向和大小
- android自适应屏幕方向和大小
- Android自适应屏幕方向、大小和分辨率
- WINDOWS+MSCS+ORACLE+OFS
- IOS 实现自定义的导航栏背景以及自定义颜色的状态栏(支持7.0以及低版本)
- vs2005 调试技巧
- NSMutableAttributedString 的使用
- 全自动过滤器:精密过滤器技术特点及应用说明
- 关于自适应屏幕方向和大小的一些经验
- Mongodb 备份迁移 还原
- OC之Foundation结构体
- Android---Matrix类的使用
- jiebaR中文分词 —— R的灵活,C的效率
- #Android笔记#利用第三方播放器vitamio实现悬浮播放效果
- TabHost,在onCreate方法中获得控件的位置信息
- winform调用webservice时步骤
- 【转载分享】总结过去10年的程序员生涯,给程序员小弟弟小妹妹们的一些总结性忠告