专栏首页LeoXu的博客[翻译]Android教程-保存数据-支持不同的屏幕

[翻译]Android教程-保存数据-支持不同的屏幕

  • 有四种一般的尺寸: 小,一般大,大,超大
  • 还有四种一般的像素密度: 低 (ldpi), 中 (mdpi), 高 (hdpi), 超高 (xhdpi)

为了声明你想要使用在不同屏幕上的布局和位图 , 你必须在不同的路径中放置这些可选的资源 , 这类似于针对不同的语言字符串你所要做的事情 . 你也要也要意识到屏幕方向(横向或者纵向)也要被考虑成一种屏幕尺寸,所以许多的应用会修改布局来优化用户在不同的屏幕方向上的体验 .

创建不同的布局


为了在不同的屏幕尺寸上优化你的用户体验,你应该为每一个你想要支持的屏幕尺寸创建单独的文件 . 每一个布局应该被保存在对应的资源路径中,使用带有  -<屏幕_尺寸> 后缀的名称 . 例如,对于大屏幕的单独布局应该被保存在 res/layout-large/ 下面.

注意 : Android 会自动缩放你的布局,来适当的适应屏幕 . 如此,你针对不同屏幕尺寸的布局就不需要担心UI元素的绝对尺寸,而是将重点放在影响到用户体验的布局结构上来 (比如重要视图相对于相邻视图的尺寸和位置 ).

例如,下面这个项目包含了一个默认的布局和一个针对大屏幕的可选布局 :

MyProject/
    res/
        layout/
            main.xml
        layout-large/
            main.xml

文件名必须精确相同,但他们的内容时不同的,这是为了响应屏幕尺寸来提供优化了的UI .

像往常一样在你的应用中引用布局文件 :

@Override  protected void onCreate(Bundle savedInstanceState) {      super.onCreate(savedInstanceState);      setContentView(R.layout.main); }

系统会基于你的应用所运行的设备的屏幕尺寸来从对应的布局路径加载布局文件 . 更多有关Android如何选择对应的资源的信息可以在 提供资源 指南中找到 .

作为另外一个示例,这里是一个带有针对横向屏幕的可选布局的项目 :

MyProject/
    res/
        layout/
            main.xml
        layout-land/
            main.xml

默认的, layout/main.xml 文件用于纵向屏幕 .

如果你想要为纵向屏幕提供一个指定的布局,而且是大屏幕 , 那么你就要同时使用large和land限定符 :

MyProject/
    res/
        layout/              # default (portrait)
            main.xml
        layout-land/         # landscape
            main.xml
        layout-large/        # large (portrait)
            main.xml
        layout-large-land/   # large landscape
            main.xml

注意: Android 3.2 及其以上版本支持许多可以让你用一种与像素密度无关的方式基于最小的宽度和高度的屏幕尺寸来指定的高级方法. 这一节对此不错叙述. 更多的信息,见 设计用于多种屏幕 .

创建不同的位图 


你应该针对一般的项目密度类型提供位图资源的恰当缩放版本: 低的, 中的, 高的 和 超高的项目密度 . 这有助于你在所有的屏幕像素密度上都能取得好的图形质量 .

为了生成这些图像,你应该从矢量格式的源生资源开始,使用如下尺寸范围为每一种项目密度生成图像 :

  • xhdpi: 2.0
  • hdpi: 1.5
  • mdpi: 1.0 (基线)
  • ldpi: 0.75

这就意味着如果你为xhdpi设备生成了一张 200x200 图片,你就应该用 150x150 为hdpi , 100x100 为 pi, 以及 75x75 为ldpi设备生成同样的资源 .

然后,将这些文件放到对应的图形资源路径中 :

MyProject/
    res/
        drawable-xhdpi/
            awesomeimage.png
        drawable-hdpi/
            awesomeimage.png
        drawable-mdpi/
            awesomeimage.png
        drawable-ldpi/
            awesomeimage.png

任何时间你引用 @drawable/awesomeimage, 系统都会基于屏幕的像素密度选择对应的位图 .

注意: 低密度 (ldpi) 资源并不总是需要的 . 当你提供了hdpiWhen you provide hdpi 资源, 系统会将它们缩小一半来适配 ldpi 的屏幕.

更多有关为应用创建图标资源的提示和指南,见 图标设计指南.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • [翻译]VelocityLayoutServlet (VLS) 综观

    这一个基本的VelocityViewServlet的一个扩展。它为基于Velocity Tools 的工程项目提供了一个简单的布局控制和定制的错误显示屏幕。Ve...

    LeoXu
  • Tapestry 教程(二)依赖、工具以及插件

    在我们深入代码之前,首先必须整好开发环境。你应该已经有了一些,或者因为各种原因,在你的开发机上全都已经有了。

    LeoXu
  • 队友的代码

    多希望自己能穿越到捣腾记事本和命令行编写代码的年代(如果有那么个年代的话),那样我就可以对IDE里眼花缭乱的黄色波浪线眼不见心不烦了...

    LeoXu
  • MySQL字符集与排序规则小结

    张申傲
  • kie-api 组件介绍

    KieServices:kie整体的入口,可以用来创建Container,resource,fileSystem等

    ydymz
  • Go调度器系列(2)宏观看调度器

    上一篇文章《Go语言高阶:调度器系列(1)起源》,学goroutine调度器之前的一些背景知识,这篇文章则是为了对调度器有个宏观的认识,从宏观的3个角度,去看待...

    大彬
  • Go调度器系列(2)宏观看调度器

    上一篇文章《Go语言高阶:调度器系列(1)起源》,学goroutine调度器之前的一些背景知识,这篇文章则是为了对调度器有个宏观的认识,从宏观的3个角度,去看待...

    大彬
  • Mysql基础篇--面试锁机制

    数据库锁就是一种保证数据一致性而使各种共享资源在被并发访问,并发访问人有序所设计的一种规则。

    小土豆Yuki
  • HW在即——红队活动之Lnk样本载荷篇

    注意: 1.本篇文章由Gcow安全团队绝影小组原创(主要研究于红蓝对抗领域) 2.本篇文章一共2700多字,44张图,预计用时8分钟 3.希望各位看官如果在看到...

    Gcow安全团队
  • 裴健:搜索皆智能​,智能皆搜索

    6月23日,加拿大西门菲莎大学教授裴健在第二届北京智源大会上做了《 智能搜索:从工具到思维方式和心智》的报告。

    AI科技评论

扫码关注云+社区

领取腾讯云代金券