求大话西游之爱你一万年mp3百度云百度云全集资源?

布丁移动资深工程师 任斐:Android多屏幕多设备的适配
发表于 10:06|
作者杨依帆
摘要:布丁移动资深Android开发工程师 任斐的演讲主题是“Android在多屏幕、多设备上的适配”。针对不同的版本,不同的屏幕尺寸、分辨率以及不同的输入方式,任斐详细阐释了“如何给更多Android设备做适配”的核心话题。
在7月28日的大会上,布丁移动资深Android开发工程师 任斐的演讲主题是&Android在多屏幕、多设备上的适配&。针对不同的版本,不同的屏幕尺寸、分辨率以及不同的输入方式,任斐详细阐释了&如何给更多Android设备做适配&的核心话题。
多屏幕适配的核心思想:
1. Android系统实现的Density Independence,在多屏幕适配中担当了很重要的角色;
2. 在一个app中实现灵活、动态的布局,像网页设计师一样思考;
3. 遵从系统的guideline,尽可能多的使用成熟的UI patterns。
图:布丁移动资深Android开发工程师 任斐
图:Android屏幕分辨率对照图
图:部分Android设备屏幕分辨率等
图:G.DPI效率
推荐阅读相关主题:
网友评论有(0)
CSDN官方微信
扫描二维码,向CSDN吐槽
微信号:CSDNnews
相关热门文章本帖子已过去太久远了,不再提供回复功能。Android下屏幕适配
本帖最后由 邱本超 于
19:48 编辑
什么是适配适配即当前应用在相同的手机上面显示相同的效果。
适配前需要首先确定当前手机所属像素密度类型(如:xhdpi、hdpi、mdpi等),下面以华为G700、模拟器为例,讲解如何计算像素密度。
案例一:& && &&&手机型号:G700
& && &&&手机分辨率: (注:手机两个直角边上分别放置了个像素点)
& && &&&手机尺寸大小:5英寸(手机斜边长度)
& && &&&
& && &&&假设a,b分别为两个直角边,c为斜边,由勾股定理可得出计算方式:sqrt(a*a+b*b)/c
& && &&&计算结果:sqrt(0*720)/5 ≈ 293.72dpi
& && &&&根据google官方文档说明得出,当前手机最接近320dpi,则将其归纳在xhdpi手机范围内,
& && &&&即1dp=2px;
复制代码
案例二:& && &&&手机型号:模拟器
& && &&&手机分辨率:800*480(注:手机两个直角边上分别放置了800及480个像素点)
& && &&&手机尺寸大小:3.7英寸(手机斜边大小)
& && &&&
& && &&&计算结果:sqrt(800*800+480*480)/3.7 ≈ 252.15dpi
& && &&&根据google官方文档(图1-1)得出,当前手机接近240dpi,则将其归纳在hdpi手机范围内,
& && &&&即1dp=1.5px。
复制代码
按照以上计算方式,大致可以将市场上的手机划分为5个像素密度等级,具体如下:(1)& &&&ldpi:120dpi,像素密度与dp转换关系为:1dp = 0.75px(2)& &&&mdpi:160dpi ,像素密度与dp转换关系为:1dp = 1px(3)& &&&hdpi:240dpi,像素密度与dp转换关系为:1dp = 1.5px(4)& &&&xhdpi:320dpi,像素密度与dp转换关系为:1dp = 2px(5)& &&&xxhdpi:480dpi,像素密度与dp转换关系为:1dp = 3px
1.jpg (98.48 KB, 下载次数: 4)
19:13 上传
2.png (19.24 KB, 下载次数: 4)
19:13 上传
下面以华为手机G700和模拟器的对比,讲解如何进行屏幕适配,具体方式如下:& &适配方式1:图片适配
不同像素密度的手机加载工程资源文件(res)中不同资源图片,以手机G700和模拟器为例,图片的布局代码如下所示:& && &&&&RelativeLayout
& && && && &&&xmlns:android=&/apk/res/android&
& && && && &&&xmlns:tools=&/tools&
& && && && &&&android:layout_width=&match_parent&
& && && && &&&android:layout_height=&match_parent&
& && && && & tools:context=&.MainActivity& &
& && && && && &&ImageView
& && && && && && &&&android:layout_width=&wrap_content&
& && && && && && &&&android:layout_height=&wrap_content&
& && && && && && &&&android:background=&@drawable/a&/&
& && &&&&/RelativeLayout&
复制代码
若使用G700(xhdpi)加载a.jpg文件,该文件位于res/drawable-xhdpi文件夹下,显示效果如下:
3.png (95.2 KB, 下载次数: 4)
19:15 上传
若使用模拟器(hdpi)加载a.jpg文件,该文件位于res/drawable-hdpi文件夹下,显示效果如下:
4.png (250.24 KB, 下载次数: 4)
19:15 上传
&&适配方式2:dimens.xml文件适配
dimens.xml存在于工程资源(res)文件夹中不同values(如:value-、value-800x480)文件夹下,可用于指定控件大小,不同像素密度手机加载不同values文件夹下的dimens.xml文件,使用方式如下:& && && &&&&LinearLayout xmlns:android=&/apk/res/android&
& && && && &xmlns:tools=&/tools&
& && && && &android:layout_width=&match_parent&
& && && && &android:layout_height=&match_parent&
& && && && &android:orientation=&vertical&
& && && && &tools:context=&.MainActivity& &
& && && && && & &!-- 不同的手机加载不同的dp --&
& && && && &&TextView
& && && && && & android:background=&#987654&
& && && && && & android:layout_width=&@dimen/width&
& && && && && & android:layout_height=&wrap_content&
& && && && && & android:text=&@string/hello_world& /&
& && &&&&/LinearLayout&
复制代码
模拟器(hdpi):加载dimens.xml资源文件,位于res/value-800x480文件夹下 & && &&&&resources&
& && && && &&dimen name=&width&&160dp&/dimen&
& && &&&&/resources&
复制代码
根据上述hdpi dp和px的转换关系1dp = 1.5px,则160dp = 240px,当前控件宽度应该位于屏幕中间位置。G700(xhdpi):加载dimens.xml资源文件,位于res/value-文件夹下& && &&&&resources&
& && && && &&dimen name=&width&&180dp&/dimen&
& && &&&&/resources&
复制代码
根据上述xhdpi 中dp和px的转换关系1dp = 2px,则180dp = 360px,当前控件宽度应该位于屏幕中间位置。
G700(xhdpi)显示的图片效果如下所示:
5.png (21.18 KB, 下载次数: 4)
19:17 上传
模拟器(hdpi)显示的图片效果如下所示:
6.jpg (54.81 KB, 下载次数: 4)
19:18 上传
& &适配方式3:布局文件适配
不同分辨率的手机,加载不同的布局文件已达到适配效果。创建多个layout(如:layout-、layout-800x480)文件夹用于存放不同像素密度手机所需布局文件。
模拟器(hdpi):加载activity_main.xml布局文件,位于res/layout-800x480文件夹下:& &&RelativeLayout
& && && && & xmlns:android=&/apk/res/android&
& && && && &xmlns:tools=&/tools&
& && && && &android:layout_width=&match_parent&
& && && && &android:layout_height=&match_parent&
& && && && &tools:context=&.MainActivity& &
& && && && && && &&&&TextView
& && && && && && && && &android:layout_width=&wrap_content&
& && && && && && && && &android:layout_height=&wrap_content&
& && && && && && && && &android:text=&800*480手机会去加载的布局文件& /&
& && && && && & &/RelativeLayout&
复制代码
G700(xhdpi):加载activity_main.xml布局文件,位于res/layout-文件夹下:& && && & &RelativeLayout
& && && && && && & xmlns:android=&/apk/res/android&
& && && && && && &&&xmlns:tools=&/tools&
& && && && && && &&&android:layout_width=&match_parent&
& && && && && && &&&android:layout_height=&match_parent&
& && && && && && &&&tools:context=&.MainActivity& &
& && && && && && && & &TextView
& && && && && && && && && & android:layout_width=&wrap_content&
& && && && && && && && && & android:layout_height=&wrap_content&
& && && && && && && && && & android:text=&手机会去加载的布局文件& /&
& && && && && & &/RelativeLayout&
复制代码
G700(xhdpi)显示的图片效果如下:
7.jpg (33.21 KB, 下载次数: 4)
19:19 上传
模拟器(hdpi)显示的图片效果如下所示:
8.jpg (53.86 KB, 下载次数: 4)
19:20 上传
& &适配方式4:java代码适配& && &通过android相应api获取当前手机的宽高像素值,按比例分配屏幕中控件的宽高以达到适配效果,下面是布局和实现功能的核心代码:& && &布局文件& && &&&&RelativeLayout
& && && &&&xmlns:android=&/apk/res/android&
& && && && &xmlns:tools=&/tools&
& && && && &android:layout_width=&match_parent&
& && && && &android:layout_height=&match_parent&
& && && && &tools:context=&.MainActivity& &
& && && && &&TextView
& && && && && & android:id=&@+id/tv&
& && && && && & android:background=&#000000&
& && && && && & android:layout_width=&wrap_content&
& && && && && & android:layout_height=&wrap_content&
& && && && && & android:text=&@string/hello_world& /&
& && &&&&/RelativeLayout&
复制代码
& && &activity中oncreate核心代码:TextView tv&&= (TextView) findViewById(R.id.tv);
& && && && && & //获取封装当前手机屏幕信息对象,用于存放宽高值
& && && && && & DisplayMetrics metrics&&= new DisplayMetrics();
& && && && && & //给当前屏幕设置宽高
& && && && && & getWindowManager().getDefaultDisplay().getMetrics(metrics);
& && && && && & //获取高度
& && && && && & Constant.srceenHeight = metrics.heightP
& && && && && & //获取宽度
& && && && && & Constant.srceenWidth = metrics.widthP
& && && && && & Log.i(tag, &Constant.srceenHeight = &+Constant.srceenHeight);
& && && && && & Log.i(tag, &Constant.srceenWidth = &+Constant.srceenWidth);
& && && && && & //宽高各占50%
& && && && && & RelativeLayout.LayoutParams layoutParams = new
& && && && && & RelativeLayout.LayoutParams(
& && && && && && && && && && &&&(int)(Constant.srceenWidth*0.5+0.5),
& && && && && && && && && && &&&(int)(Constant.srceenHeight*0.5+0.5));
& && && && && & tv.setLayoutParams(layoutParams);
复制代码G700(xhdpi)显示效果如下:
9.jpg (33.13 KB, 下载次数: 4)
19:22 上传
模拟器(hdpi)显示效果如下:
10.jpg (79.39 KB, 下载次数: 4)
19:24 上传
&&适配方式5:权重适配& & 通过android提供的(权重)剩余空间分配,达到适配效果。布局文件如下所示:& && &&&&LinearLayout xmlns:android=&/apk/res/android&
& && && && &xmlns:tools=&/tools&
& && && && &android:layout_width=&match_parent&
& && && && &android:layout_height=&match_parent&
& && && && &android:orientation=&horizontal&
& && && && &tools:context=&.MainActivity& &
& && && && && & &TextView
& && && && && && &&&android:background=&#000000&
& && && && && && &&&android:layout_width=&0dp&
& && && && && && &&&android:layout_weight=&1&
& && && && && &&&android:layout_height=&match_parent&/&
& && && && && & &TextView
& && && && && && &&&android:background=&#123456&
& && && && && && &&&android:layout_width=&0dp&
& && && && && && &&&android:layout_weight=&1&
& && && && && && &&&android:layout_height=&match_parent&/&
& && &&&&/LinearLayout&
复制代码
G700(xhdpi)显示的图片效果如下所示:
11.png (15.64 KB, 下载次数: 4)
19:25 上传
模拟器(hdpi)显示的图片效果如下所示:
13.png (110.21 KB, 下载次数: 4)
19:48 上传
轻松打造安卓高级工程师打造会代码的全能UI设计师做被争抢的ios开发者
? ? ? ? ? ? ? ? ? ?
Powered by关于Android的多种屏幕适配
关于Android的多种屏幕适配
20:08:39 |
摘要:严格来说,作为读者,你应该带着批判性质的眼光来看这篇文章,因为这篇文章是一个尚未通读Android官方开发资料《Supporting Multiple Screens》的纯产品人员所写,相关理解来源于零星的资料、实践以及和开发人员的沟通,此文章更多为目前盆地个人理解的总结。我会给自己定下目标,早日通读官方资料,此文中的相关错误,也请予以指正。
一、Andro ...
严格来说,作为读者,你应该带着批判性质的眼光来看这篇文章,因为这篇文章是一个尚未通读Android官方开发资料的纯产品人员所写,相关理解来源于零星的资料、实践以及和开发人员的沟通,此文章更多为目前个人理解的总结。我会给自己定下目标,早日通读官方资料,此文中的相关错误,也请予以指正。
一、Android支持的多种屏幕
传统意义上,一般是是这么认为的:
ldpi: 对应分辨率240×320
mdpi: 对应分辨率320×480
hdpi:对应分辨率480×800或480×854
但实际上没有这么简单,直接看官方资料的下标,可以看到其实ldpi一样由480×800,甚至还有
低密度(ldpi 120)
中密度(mdpi 160)
高密度(hdpi 240)
超高密度(320 xhdpi)
QVGA (240×320)
WQVGA400 (240×400)
WQVGA432 (240×432)
HVGA (320×480)
WVGA800 (480×800)
WVGA854 (480×854)
WVGA800** (480×800)
WVGA854** (480×854)
WVGA800* (480×800)
WVGA854* (480×854)
二、如何分辨是ldpi、mdpi、hdpi?
为什么要分辨率ldpi、mdpi、hdpi?我的理解,是为了要在不同的屏幕密度下取得最好的显示效果。
从上一段来看,通过分辨率来看并不是很靠谱,那怎么样才靠谱?其实,只要我们知道屏幕分辨率、屏幕尺寸(对角线长度),就可以算出相应的屏幕密度,从而根据其范围得出属于那种屏幕密度。
我们可以根据长或者根据宽来计算出dpi,计算公式为:
dpi=宽/((尺寸^2 * 宽^2)/(宽^2 + 高^2))^(1/2)
= 长/((尺寸^2 * 长^2)/(宽^2 + 高^2))^(1/2)
此计算公式可以在excel中予以计算。
大概计算方法如下,以宽为例:
1.比如分辨率为320×480,则长宽比为1:1.5
2.比如屏幕尺寸为3.6”,则根据勾股定理,”长^2+宽^2=3.6^2″,即”宽^2+2.25*宽^2=12.96″,得出”宽^2=12.96/3.25″,则”宽=(12.96/3.25)^(1/2)= 1.;
3.宽为320px,分布在1.9969”上,因此密度为320/1.7
4.因此此密度为mdpi的密度
1.此部分参考文章为:
2.两款计算dpi的应用
三、粗略的分辨率ldpi 、mdpi、hdpi
套用老资料,其实传统意义上的通过分辨率判断手机dpi,还是比较靠谱的:
ldpi: 对应分辨率240×320
mdpi: 对应分辨率320×480
hdpi:对应分辨率480×800或480×854
为什么呢?因为ldpi如果要是320×480,则需要4.8寸的屏幕,如果是480×800,则需要7.8寸的屏幕,如果mdpi是480×800,则需要5.2寸的屏幕,一般的手机屏幕不会这么大,所以还算靠谱。
当然,如果是分辨android pad的dpi,建议还是算一下吧。
四、如何适配之9-patch?
官方资料:
简单来说,如果你的图片资源是可以拉伸的而不会变形或者模糊的,则完全可以使用9-patch的格式,而不用为不同的dpi提供不同的图片资源。
此格式经常用在背景性质的图片资源中。
android开发包提供了9-patch的制作工具,上方的划线指明横向可以拉伸的区域,左方的划线指明纵向可以拉伸的区域,下方的划线指明水平居中的区域,右方的划线指明垂直居中的区域。
在的理解中,一般提供hdpi大小的图片,并制作为9-patch格式,此时的拉伸在mdpi、ldpi上基本都不会带来问题。
这部分网上有不少资料,这里就不再赘述了,上述的描述是为了日后便于想起和理解。
五、如何适配指图标和其他图片
除了指明拉伸区域拉伸不变形的图片外,类似图标或者其他会变形的图片资源,最佳情况下需要分别针对不同的dpi提供不同的图片。
此处特别需要注意的是,假设不考虑xhdpi的支持,hdpi、mdpi、ldpi的支持,需要考虑相应的比例,即1.5:1:0.75,需要在相应比例关系下保持整数的像素值,否则可能会产生模糊的情况。
举个具体例子,某个图标在hdpi下大小为48×48,则mdpi和ldpi下分别为32×32和24×24,如果此图标在hdpi设定为50×50,则mdpi下50无法整除1.5,因此mdpi下图标不论图标设定为33×33还是34×34都会模糊(可能独立指定可以避免此情况,此部分不太了解)。
六、菜单图标和应用图标
这一部分在官方资料中描述的很全面,只是不少应用开发者没有按照规范来,比如桌面图标的在hdpi上分辨率虽然定义的是72×72,但实际上应该只占60×60(如果是正方形,则应该是56×56),而不少应用直接把图标设定为72×72,所以会发现android中很多图标比系统的图标大一些,就是这个缘故。
这一部分就直接参照官方文档吧,做法上也就是做三份,只是需要遵照文档来。
作为产品人员,了解这个的目的,是为了向UI人员协调相应的UI资源,以及和开发保持顺畅的沟通,如果不了解这个,可能事倍功半,所以,作为产品人员,还是了解下吧。
恩,暂时就这些了,等俺通读了官方文档后,再来补充吧。上述描述中错误的地方,也请不吝赐教。
版权声明:转载时请以超链接形式标明文章原始出处和作者信息
本文链接:
版权所有:非特殊声明均为本站原创文章,转载请注明出处:
订阅更新:您可以通过
您可能感兴趣的文章&&&&android多屏幕多分辨率适配
android多屏幕多分辨率适配
android多屏幕多分辨率适配,告诉你怎么创建正确的布局资源
若举报审核通过,可奖励20下载分
被举报人:
aaren_jiang
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
VIP下载&&免积分60元/年(1200次)
您可能还需要
移动开发下载排行}

我要回帖

更多关于 大话西游爱你一万年 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信