Android-关于屏幕适配的一些经验

摘要:
I当水平屏幕切换到垂直屏幕时,解决方案是在res目录中创建布局端口和布局土地目录,您可以在其中分别放置垂直和水平屏幕布局文件。当手机屏幕方向改变时,Android系统会自动调用相应的布局文件。您可以在xml文件中使用Android Manifest,例如,如果活动设置为Android:screenOrientation=“portlet”,则将始终保持垂直屏幕;如果设置为android:screenOrientation=“landscape”,则始终保持水平屏幕。图片问题很容易解决。在Android2.0API中,我们会发现原来的可绘制文件夹已更改为三个:可绘制hdpi、可绘制mdpi和可绘制ldpi。

刚开始,我开发时选取的模拟器是WVGA854,其分辨率为854*480。我开发完毕后装在800*480的手机上时感觉很OK,但是装到480*320、以及320*240分辨率上的手机时,很多界面都变形了,这时我感受到了app自适应的重要性。 

     自适应主要会遇到两个大问题:横屏和竖屏的切换,以及分辨率大小不同。 
     
     一.当横屏切换成竖屏时,解决的办法: 
     在res目录下建立layout-portlayout-land两个目录,里面分别放置竖屏和横屏两种布局文件,当手机屏幕方向变化的时android系统会自动调用相应的布局文件。 
     当然还有办法就是不切换。要么都是横屏或者要么都是竖屏。可以在AndroidManifest.xml文件中设置,比如某个Activity设置为android:screenOrientation="portrait" 这样就一直保持竖屏,如果设置为 
android:screenOrientation="landscape" 这样就一直保持横屏。 

     二.当遇到分辨率不同大小时,我们也会遇到三个问题:图片大小、布局、横屏和竖屏的切换。 

     图片问题好解决,到android2.0以后的api中,我们会发现原先的drawable文件夹变成了3个分别是drawable-hdpidrawable-mdpidrawable-ldpi。 
     第一个文件夹放高分辨率手机的图片,比如:854*480800*480 
     第二个文件夹放中分辨率手机的图片,比如:480*320 
     第三个文件夹放低分辨率手机的图片,比如:320*240 

     关于布局和横屏切换成竖屏类似,也只需要在res目录下创建不同的layout文件夹,比如layout-480x320,layout-800x480,系统会根据屏幕的大小自己选择合适的layout来使用。 
    
    

layout 是适配高分辨率竖屏的布局文件夹 
layout-land 是适配高分辨率横屏的布局文件夹 
layout-land-320x240 是适配低分辨率横屏的布局文件夹 
layout-land-480x320 是适配中分辨率横屏的布局文件夹 
layout-port-320x240 是适配低分辨率竖屏的布局文件夹 
layout-port-480x320 是适配中分辨率竖屏的布局文件夹 

     这样布局文件的适配就做完了。 
     我个人觉得先按照高分辨率的模拟器开发效果比较好,然后去做各个不同分辨率的适配。有时候我们布局时,低分辨率的布局可能需要修改下。 


[mw_shl_code=java,true]最后,还有一个问题如果是在java程序中写死的布局怎么办? 
      这个就很恼火了,需要判断屏幕的大小了,获取屏幕大小的代码如下:
WindowManager windowManager = getWindowManager();     
         Display display = windowManager.getDefaultDisplay();     
         int screenWidth = display.getWidth();     

int screenHeight = display.getHeight();  [/mw_shl_code][mw_shl_code=java,true]  下面的代码片段是我自己在程序中写死布局使用的,仅供参考:

Button cancelBtn = new Button(this);  
         if (screenWidth<320 || screenHeight<320)   
             cancelBtn.setLayoutParams(new LayoutParams(60,  
                     android.view.ViewGroup.LayoutParams.WRAP_CONTENT));  
         else if (screenWidth <480 &&screenHeight == 480)  
             cancelBtn.setLayoutParams(new LayoutParams(80,  
                     android.view.ViewGroup.LayoutParams.WRAP_CONTENT));  
         else if (screenWidth >480 && screenHeight == 480)   
             cancelBtn.setLayoutParams(new LayoutParams(160,  
                     android.view.ViewGroup.LayoutParams.WRAP_CONTENT));  
         else  
             cancelBtn.setLayoutParams(new LayoutParams(120,  

android.view.ViewGroup.LayoutParams.WRAP_CONTENT));  [/mw_shl_code]

免责声明:文章转载自《Android-关于屏幕适配的一些经验》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇如何查看用友通数据的版本pyton unittest下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

linux suse 超出频率限制 问题

一、今天在linux suse sp3安装完成后,发现启动后,显示器飘过 一个提示“超出频率限制” ,接着就是全屏黑屏。 晕!!!        在网上找了很多都发现改不了,重启机子又回到以前一样。 只能用在别的机子上SSH登录, 用root登录后,输入yast进入,发现服务器那边有弹出设置。可以设置登录。进去后也可以设置,但是重启后又是黑屏 二、参考...

从淘宝和网易的font-size思考移动端怎样使用rem?

最近翻了一下关于移动端的rem的使用,怎样最方便。在读到流云诸葛的一篇关于《从网易与淘宝的font-size思考前端设计稿与工作流》的文章后,来总结一下。 然而根据我以往做移动端web项目的时候,设计稿一般是640或者750的,我一般会在head里面这样写: <meta name="viewport"content="width=750, user-...

IOS开发之尺寸

  在移动端或者前端开发中,UI图通常是带标注的,指定某个控件的长宽等属性,一般UI给的是68px,72px这样的样式,但是我们在开发过程中通常又并不是完全按照上面的标注去设置值,有时候需要将这个标注除以2或者除以3在进行赋值给frame,这其中的原因是因为标注一般都是按px格式给的,但是iOS底层绘制的时候是按照pt为单位进行绘制,这两个的区别在于:...

Qt 使用全局缩放进行全分辨率适配(QT_SCALE_FACTOR)

事出有因  因为现在做的一个项目是全程全屏显示的。因此不同屏幕分辨率对程序界面的影响太大。而UI设计的时候又没有过多的考虑自动布局这方面的事。  虽然在刚开始做界面的时候已经尽量利用自动布局来做,但是有些控件提供的图片大小不太合适,在做的时候只能给控件设置固定大小。在测试不同分辨率的时候发现界面展现的效果不同。于是就开始想办法做分辨率适配。 偶然事件  具...

iphone 各型号设备的屏幕尺寸

4 320×480   5 320×568 6 375×667 6plus 414×736 6s 375×667 6splus 414×736 相关链接:http://blog.csdn.net/phunxm/article/details/42174937 1.iPhone尺寸规格 设备 iPhone 宽 Width...

Android 本地化适配:RTL(right-to-left) 适配清单

本文首发自公众号:承香墨影(ID:cxmyDev),欢迎关注。 一. 序 越来越多的公司 App,都开始淘金海外,寻找更多的机会。然而海外市场千差万别,无论是市场还是用户的使用习惯,都有诸多的不同。 当你接触一款出海 App 的时候,除了需要了解海外 Google Service 的整个生态圈,还要做好不同语言的适配。语言适配最通用的做法就是根据不同系统...