由于目前在做的一款app需要适配手机和平板,所以我在研究怎么构建可适应所有屏幕尺寸的布局方法。

在web的自适应布局上我有很多经验,比如使用网格流,CSS3中的media queries属性等等,这些都可以实现web上的自适应布局,所以我想在Android上试试看。

在Android上,是通过configuration qualifiers的方式来加载不同的资源,基于不同的手机屏幕尺寸或者屏幕的朝向(竖直还是水平),而我***的目标就是创建一个可以自动缩放的布局,而不用根据不同的屏幕尺寸加载不同的布局文件。

除了为每种设备尺寸分别制作不同的布局文件外,我发现一种更简单的方法,就是为不同屏幕尺寸的设备重载style.xml文件。

也许你会觉得它很像CSS样式,首先可以定义一个基本的style文件,代表普通设备尺寸,它的路径位于values/styles.xml,然后还可以定义中等设备尺寸,在values-sw600dp/styles.xml(7寸平板),values-sw600dp-land/styles.xml表示水平方向的屏幕,values-sw720dp/styles.xml表示十寸的平板等等。

在CSS中的自适应网格系统中,我们可以布局一个宽是960像素的.container类(没有margin),而在手机上,我们也可以布局一个100%宽的.container(也是没有margin的)。

我们可以在Android上使用相同的方法实现,首先,需要建立一个基类样式。

res/values/styles.xml

0dp

16dp

match_parent

match_parent

vertical

@drawable/container_background

对于平板(竖直的)来说,我们可以添加一些外边距,因为屏幕够大。

res/values-sw600dp/styles.xml

0dp

32dp

match_parent

match_parent

vertical

@drawable/container_background

在平板上竖直和水平的***区别在于,我们会加上margin值,这样内容就不会充满整个屏幕了、我们还可以给父视图加一个背景图片,来填充空白区域。

res/values-sw600dp-land/styles.xml

130dp

130dp

32dp

match_parent

match_parent

vertical

@drawable/container_background

然后我们可以在不同的屏幕上,这样使用样式文件:

... buttons, edit texts, text views, etc ...

这是在四寸屏幕手机的效果:

这是在七寸平板上的效果:

这是在七寸平板的横屏效果:

还有一些在CSS里面非常方便的属性(比如bootstrap),它们是一些帮助类,如.visible-phone,.hidden-phone,.visible-tablet等等,在Android上也可以这么做。

gone

visible

gone

visible

把这些样式放在对应的配置文件夹中,然后就可以在需要的时候隐藏显示相应的控件了。

... some content ...

style="@style/TabletLandscapeOnly">

... some extra content since we have space ...

对于平板(水平的)来说,此样式会显示两列,但是对于大多数设备来说,第二列是不会显示的。

仅仅用了几行xml代码,我们就能够创建一个迷你的布局框架了,我们还可以扩展这种技术,根据需要去实现一个通用的样式文件,以后可以用到项目中。

很遗憾的是,很难把Android的资源打包进jar包中(非Gradle的话),所以在Android上很难像bootstrap那样去构建一个框架(不要被这些项目误导了 ,如:http://www.androidbootstrap.com/,它们没有你想象的那么强大),还好Android正在向Gradle迁移,这样可以使得制作Android前端的布局框架就更加方便了。

【编辑推荐】

【责任编辑:闫佳明 TEL:(010)68476606】

点赞 0

android中自适应布局教程,Android自适应布局设计技巧相关推荐

  1. Android中导航栏之自定义导航布局

    Toolbar系列文章导航 Android中导航栏之Toolbar的使用 Android中导航栏之溢出菜单OverflowMenu Android中导航栏之搜索框SearchView Android中 ...

  2. android布局新建联系人,Android中设置搜素联系人的布局

    我们现在要达到下面的效果: 我们这样做了:我们可以先定义一个线性布局: 在线性布局中加入一个ImageView和一个Edittext 最后给这个线性布局加入背景,该背景就是外面的一个灰色边框. 我们来 ...

  3. Android中自定义控件之飞入飞出布局及随机布局实现方式

    本文主要介绍Android中飞入飞出布局及随机布局的实现方式,具体的效果如下: 实现飞入飞出效果 FlyLayout.java /*** Created by MG_ZXC on 2018/3/24. ...

  4. Android中微信主界面菜单栏的布局实现代码

    最近一段时间进了Android的大坑,一门心思的学习Android大法,读了两三本书,就萌生了模仿微信界面的想法. 分析Android版本的微信界面需求就会发现它的核心,不得不佩服微信界面的简洁和灵活 ...

  5. 速读原著-Android应用开发入门教程(Android中建立工程)

    2.4 Android中建立工程 2.4.1. 建立工程 Android 的 SDK 环境安装完成后,就可以在 SDK 中建立工程并进行调试了. 建立 Android 工程步骤如下: 选择" ...

  6. android中私有方法 继承,Android项目实战系列—基于博学谷(五)个人资料

    由于这个模块内容较多,篇幅较长,请耐心阅读. 个人资料模块分为两个部分 [x] [个人资料]() [x] [资料修改]() 一.个人资料 1.个人资料界面 (1).创建个人资料界面 在com.buxu ...

  7. android中的add方法,Android中Fragment怎么addView?

    慕勒3428872 Fragment是Android honeycomb 3.0新增的概念,在Android--Fragment介绍.AndroidFragment使用.Android Fragmen ...

  8. android中bmob云存储,Android中的Bmob移动后端云服务器功能

    PS:一般情况下,我们在写android程序的时候,想要实现登录注册功能,可以选择自己用servlet作为服务端来实现过滤没有注册过的用户,但是太麻烦,而且不是随时都可以用的.这里介绍一个移动后端云服 ...

  9. android中shape资源定义,Android可绘制对象资源之shape和layer-list使用

    Code4Android.jpg 前言 文章中内容多来自谷歌官方文档详戳,一些示例代码详戳GitHub,不喜请轻喷. 可绘制对象资源 可绘制对象资源是一般概念,是指可在屏幕上绘制的图形,以及可以使用 ...

最新文章

  1. HbuilderX中的git的使用 git HbuilderXgit HbuilderX 使用git
  2. 在Android中进行单元测试遇到的问题
  3. 《Windows核心编程》---Interlocked原子访问系列函数
  4. 做骨龄检测_小柚熊:骨龄测试最佳年龄
  5. Spark源码走读10——Spark On Yarn
  6. 备份Mysql数据库时,报 Couldn't execute 'show fields from的一种问题解决方案
  7. 影响程序运行速度的几个因素
  8. [UITableView]简介
  9. 【【模板】严格次小生成树[BJWC2010]】
  10. 四平方和蓝桥杯Java_蓝桥杯-四平方和问题
  11. linux进程栈和线程栈大小,Linux进程栈和线程栈
  12. WawaKM:关于批量抓图的需求分析及设计
  13. DBeaver 安装及配置离线驱动
  14. Python学习笔记(二)(图灵学院)
  15. 云开发电商小程序实战教程-篇首语
  16. C语言入门——初识C语言
  17. 可以写一个表白代码吗
  18. 你写的JSP就是JSP么?
  19. 时间的加减法怎么用计算机算,时间加减计算器
  20. 生病原来不是因为缺药,而是因为缺营养

热门文章

  1. admm算法_「优化」交替方向乘子法(ADMM)的基本原理
  2. matlab reshape函数_numpy中的np.ascontiguousarray()函数
  3. signature=bb45d44ceab9b6563988c6c1a9b5e667,Bookbinding signature comb and spine device
  4. oracle fmis 是什么系统?,FMSQL
  5. 扔掉 Postman,Apifox 才是 YYDS!
  6. 2021年技术人员的最佳Linux桌面前5名
  7. Spring Security 和 Shiro 该如何选择?
  8. 皮一皮:这个TONY有点厉害!
  9. VS Code的7个开源替代品
  10. ThreadPoolExecutor 的八种拒绝策略 | 含番外!