android_interface_支持不同的screen

  首先,android设备不是传统意义上的手机,其实TA包括的从handset到tv这样一个大的范围,google说,一个好的用户界面是正好optimize这个screen而不是延展到整个screen。

  android系统上,从最初版本到1.5是一种控制模式,从1.6到3.2另一种控制模式,从3.2版本到后来,tablet到出现,又是另外到一种模式。

  四个概念:

screen size:实际的东西的大小,屏幕大小

screen density:屏幕密度,就是像素衡量的px(pixel)

orientation:屏幕朝向,主要是重力感应旋转手机的时候用到的

resolution:英文原话是 the total number of physical pixels on a screen

Density-independent pixel:就是最重要的dp,android建议所有的计算都是在dp的情况下进行

然后就是screen的分类:主要在3.2之前是:

   按照size分:smallnormallarge, and xlarge

   按照密度分:ldpi (low), mdpi (medium), hdpi (high), and xhdpi (extra high)

最头疼的是什么呢,个厂家机型分裂,各种尺寸之间都是不一定的,没有统一的规格,都互有交叉。

下面andriod给出了按照dp分类的,独立像素分类的规格:

  • xlarge screens are at least 960dp x 720dp
  • large screens are at least 640dp x 480dp
  • normal screens are at least 470dp x 320dp
  • small screens are at least 426dp x 320dp
第二个应该是iphone的分辨率吧,不知道5代会不会继续执行乔帮主的意愿。
 
其中android系统用两个方法去帮助app实现独立像素:(中文翻译不好,引用英文)
1.the system scales dp units as appropriate for the current screen density.
2.The system scales drawable resources to the appropriate size, based on the current screen density, if necessary.
解释下,第一个就是,理解成为转型吧,把一个正常的图往大图上转,或者往小图上转。必然前一个我们看起来会模糊。或者作者提供了可替代资源,不同分辨率的,系统就是自动筛选一个合适的。
 
下面就是具体的如何how to 去支持这些东西呢。
第一个不太的pratique,就是规定了严格的屏幕大小,就是我们悲剧的下了一个游戏,后来发现不能玩,也许就是有这个原因。
第二个就是上面说的第二个原理,同样提供不同规格的layout
第三个就是上面说的第二个,提供不同规格的drawable素材。
上面的具体细节,google文档里面的range of screens support和providing alternative resources有具体介绍。。。很长的。(11:29今晚就到这了,去看tld了)。
 
(早上英语课翘了,中午赶到机房,binome去吃饭了,差不多一个小时的时间的空隙,别的什么事情都做不了,接着看昨晚的android吧。)
 
在理解了上面所说的为什么要提供什么不同规格的文件啊的原理,和系统如何去控制规格,现在就剩下我们程序员如何去控制规格这个东西,android文档上面引入 Using configuration qualifiers翻译过来应该是使用配置标识符。
   创建一个新的资源文件夹使用<resources_name>-<qualifier>,其实很好理解,前面的部分指明了是哪种规格,后面指明是哪种文件,android强调后面的<qulifier>必须同名,看个例子就很清楚了:
res/layout/my_layout.xml             // layout for normal screen size ("default")
res
/layout-small/my_layout.xml       // layout for small screen size
res
/layout-large/my_layout.xml       // layout for large screen size
res
/layout-xlarge/my_layout.xml      // layout for extra large screen size
res
/layout-xlarge-land/my_layout.xml // layout for extra large in landscape orientation

res
/drawable-mdpi/my_icon.png        // bitmap for medium density
res
/drawable-hdpi/my_icon.png        // bitmap for high density
res
/drawable-xhdpi/my_icon.png       // bitmap for extra high density
先知道上面的一个概念,然后细节问题还需要具体研究。对于这个替代资源的问题,android建议仔细研读 Providing Alternative Resources这一章。
  知道了上面的如何去创建这些不同规格的资源目录,具体的我们下面将学习设计这些可替换layout和drawables资源:
  其中对于layout很好理解,一个只靠放大缩小的布局用户是肯定不能够接受的。一个简单的例子就是我们在用window的时候,把分辨率调高,我们发现图标很小,如果调低我们发现图标很大,看着很不爽。同样的道理,如果我们只提供一个规格的布局,那么我们在低分辨率设备上这个就不好看了,在高设备上,试想我们是在中型设备上研发的,比如此时我们有两行应该是写在一行里面的,但是这个中型设备不够大,所以我们写了两行,但是我们的本意是写一行,此时我们放到大的设备中去,我们可以写成最佳的一行形式,但是我们还是使用以前的layout,这也就造成了android中说的,没有optimize for bigger screens。
  同样的问题会出现在我们的手机是水平方向还是垂直方向,这个不难理解。
  android为解决部分提供了一个叫做nine-patch的资源图片,以.9.png结尾。这个我看文档是没有看懂,后来去百度文库搜了下,最后明白了。一个图片,普通图片,如果android将其放大,那么肯定是平均放大,什么意思呢,比如一个button里面有个三角箭头的图片,那么我们整体的都放大了。如果我们想控制让三角箭头不放大,只是其他的空白的地方放大,怎么办办,这时候这个nine-patch就有用了,我们可以指定可拉伸的位置,就是文档里面说的,左边划线,上边划线之类的。搜下就行,其实很简单的。这里就不多说了。给大家个网址,上面说的很清楚
  http://wenku.baidu.com/view/948a1f84bceb19e8b8f6ba5b.html
  最后就是这个可替换drawables资源的问题,android给了一个计算公式3:4:6:8
这个比例是为了创建不同密度的drawables资源。一个例子:我们现在有一个中型的48*48的,推出
  • 36x36 for low-density
  • 48x48 for medium-density
  • 72x72 for high-density
  • 96x96 for extra high-density

这个推荐去看下 Icon Design Guidelines 。

 一小时到了,今天计划完成,明天可以看下api里面提供的demo了,加油,上课了。

 

 

 

 

 

 

  

转载于:https://www.cnblogs.com/hit-tidus/archive/2012/01/24/android_interface_By_tidus.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值