<Android 基础(二十一)> Android 屏幕适配
基本概念
1. 什么是屏幕尺寸、屏幕分辨率、屏幕像素密度?
屏幕尺寸是指屏幕对角线的长度。单位是英寸,1英寸=2.54厘米
屏幕分辨率是指在横纵向上的像素点数,单位是px,1px=1像素点,一般是纵向像素横向像素,如1280×720
屏幕像素密度是指每英寸上的像素点数,单位是dpi,即“dot per inch”的缩写,像素密度和屏幕尺寸和屏幕分辨率有关
屏幕像素密度计算公式
例如:计算Nexus5的屏幕像素密度:
屏幕尺寸:4.95inch、分辨率:1920×1080,屏幕像素密度:445
计算结果可以对应上,证明这个结论是OK的。
2. 什么是dp、dip、dpi、sp、px?
dp/dip—-> dip和dp是一个意思,都是Density Independent Pixels的缩写,即密度无关像素,上面我们说过,dpi是屏幕像素密度,假如一英寸里面有160个像素,这个屏幕的像素密度就是160dpi,那么在这种情况下,dp和px如何换算呢?在Android中,规定以160dpi为基准,1dip=1px,如果密度是320dpi,则1dip=2px,以此类推。
dpi—> 屏幕像素密度的单位,“dot per inch”的缩写,上面有介绍
sp—> Scale-Independent Pixels的缩写,可以根据文字大小首选项自动进行缩放。Google推荐我们使用12sp以上的大小,通常可以使用12sp,14sp,18sp,22sp,最好不要使用奇数和小数。
px—> 像素,物理上的绝对单位
3. 什么是mdpi、hdpi、xdpi、xxdpi、xxxdpi?
| 名称 | 像素密度范围 | 图标尺寸 | 比例 |
|---|---|---|---|
| mdpi | 120dpi~160dpi | 48x48px | 1 |
| hdpi | 160dpi~240dpi | 72x72px | 1.5 |
| xhdpi | 240dpi~320dpi | 96x96px | 2 |
| xxhdpi | 320dpi~480dpi | 144x144px | 3 |
| xxxhdpi | 480dpi~640dpi | 192x192px | 4 |
在处理图标的时候,通过mdpi的48x48然后按照一定的比例制作对应的图标放入对应的文件夹下即可。
解决方案
1. 使用wrap_content、match_parent、layout_weight
wrap_content——————-> 包裹内容
match_parent/fill_parent —> 填满父布局
layout_weight——————-> 布局权重
前面两个不同多讲,layout_weight
layout_weight只有在Linearlayout中才有效。之所以android:layout_weight会引起争议,是因为在设置该属性的同时,设置android:layout_width为wrap_content和match_parent会造成两种截然相反的效果。
公式:所占宽度=原来宽度+剩余空间所占百分比的宽度
一般情况,我们都是设置要进行比例分配的方向的宽度为0dp,然后再用权重进行分配
A.width:B.widht = A.layout_weight : B.layout_weight但是如果设置要进行比例分配的方向的宽度为match_parent,效果就截然相反。
A.width:B.widht = B.layout_weight : A.layout_weight
Google官方推荐,当使用weight属性时,将width设为0dip即可,效果跟设成wrap_content是一样的。这样weight就可以理解为占比了!
2. 使用线性布局和相对布局,尽量减少对绝对布局的使用
线性布局中可以使用layout_weight的方式
相对布局可以保持容器中子View相对位置的稳定
绝对布局太过于死板
3. 使用限定符
尺寸限定符 res/layout-large/main.xml (适用与android 3.2之前)
最小限定符 res/layout-sw600dp/main.xml (Small Width, 适用于android 3.2之后)
4. 使用布局别名
这种方式是通过资源文件使用别名
<resource >
<item name="main" type="layout">@layout/main_twopanes</item>
<resource>
替换后面的main_twopanes的名称为不同的布局,然后定义在不同的文件夹下,然后使用的过程中使用
setContentView(R.layout.main)
加载的过程中,就可以根据屏幕尺寸和android版本加载不同的布局,但是别名都是main。
5. 使用屏幕方向限定符
横屏和竖屏的显示方式往往有一些差异。
横屏: res/values-sw600dp-land/layouts.xml
竖屏: res/values-sw600dp-port/layouts.xml
6. 使用自动拉伸位图
自动拉伸位图,即android下特有的.9.png图片格式。
工具,draw9patch.bat
特点,
左边和上边点下一个像素或多个像素点,是选择了拉伸的像素,即把选择的像素点进行拉伸。选择的像素点越多,拉伸的程度也越大。
右边和下边是选择内容区域,在右边和下边画上直线,交叉的区域就是内容区域。
<Android 基础(二十一)> Android 屏幕适配的更多相关文章
- Android屏幕适配全攻略 (转载)
http://blog.csdn.net/jdsjlzx/article/details/45891551 https://github.com/hongyangAndroid/AndroidAuto ...
- 【收藏】Android屏幕适配全攻略(最权威的Google官方适配指导)
来源:http://blog.csdn.net/zhaokaiqiang1992 更多:Android AutoLayout全新的适配方式, 堪称适配终结者 Android的屏幕适配一直以来都在折磨着 ...
- Android屏幕适配全攻略(最权威的官方适配指导)(转),共大家分享。
Android的屏幕适配一直以来都在折磨着我们这些开发者,本篇文章以Google的官方文档为基础,全面而深入的讲解了Android屏幕适配的原因.重要概念.解决方案及最佳实践,我相信如果你能认真的学习 ...
- Android屏幕适配全攻略(最权威的官方适配指导) (转)
招聘信息: Cocos2d-X 前端主程 [新浪微博]手机客户端iOS研发工程师 20k-40k iOS 开发工程师 iOS高级开发工程师(中国排名第一的企业级移动互联网云计算公司 和创科技 红圈营销 ...
- 腾讯优测| 让Android屏幕适配开发更简单-Google百分比布
文/腾讯优测工程师 吴宇焕 腾讯优测优社区干货精选~ 相信开发同学都被安卓设备碎片化的问题折磨过,市面上安卓手机的主流屏幕尺寸种类繁多,给适配造成很大的困难.就算搞定了屏幕尺寸问题,各种分辨率又让人眼 ...
- Android 屏幕适配(一)百分比布局库(percent-support-lib) 解析与扩展
转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/46695347: 本文出自:[张鸿洋的博客] 一.概述 周末游戏打得过猛,于是周 ...
- Android重写getResources规避用户调整系统字体大小影响Android屏幕适配
Android屏幕适配一直是一个头疼的问题.除此之外还要考虑APP在实际应用场景中,用户千奇百怪的设置,最常见的用户设置行为就是设置手机的字体大小,比如把字体设置成超大或者超小,这对屏幕适配又带来额外 ...
- (转)android屏幕适配
声明:eoe文章著作权属于作者,受法律保护,转载时请务必以超链接形式附带如下信息 原文作者: zhuangyujia 原文地址: http://my.eoe.cn/zhuangyujia/archiv ...
- 【转】Android屏幕适配全攻略(最权威的官方适配指导)
原文网址:http://blog.csdn.net/jdsjlzx/article/details/45891551 Android的屏幕适配一直以来都在折磨着我们这些开发者,本篇文章以Google的 ...
- Android开发——自动生成Android屏幕适配的dimens.xml文件
使用dimens.xml解决屏幕适配问题是Android官方解决方案,本文主要讲述了如何自动生成Android屏幕适配的dimens.xml,减少了工作量,在维护dimens.xml文件时更加省时省力 ...
随机推荐
- 2016级算法期末上机-F.中等·AlvinZH's Fight with DDLs II
1118 AlvinZH's Fight with DDLs II 思路 中等题,贪心. 理解题意,每次攻击中,可以使某个敌人生命值-1,自己生命值减去∑存活敌人总攻击力. 贪心思想,血量少攻击高的要 ...
- 简单工厂模式&策略模式-简介与区别
不得不说,这两种模式真的很像. 相似点:都用到了面向对象的继承.多态.抽象,都拥有相似的结构. 不同点:工厂模式仅提供具体的实例对象,怎么使用这个对象是client的自由,策略模式client可以通过 ...
- java获取某段时间内的月份列表
/**获取两个时间节点之间的月份列表**/ private static List<String> getMonthBetween(String minDate, String maxDa ...
- Wi-Fi科普讲稿
Wi-Fi 从入门到?? 组员:deleted 什么是Wi-Fi Wi-Fi 在中文里又称作"无线热点",是Wi-Fi联盟制造商的商标做为产品的品牌认证,是一个创建于IEEE 80 ...
- winform 验证用户正确后打开新窗口时关闭登陆窗口
在program.cs中 Login login=new Login(); if( login.ShowDialog()==DialogResult.Ok)//注意这里要显示模 ...
- hibernate3.3.2搭建log4j日志环境
日志的框架有很多,hibernate3.3.2用的是slf4j,slf4j简单理解为一个接口,标准.具体的实现可以是不同的实现(如slf4j自己的实现,log4j等).slf就像JDBC,JPA.自己 ...
- spring之IOC模拟实现
使用Spring框架已经有很长时间了,一直没有仔细的想过框架的设计思想是什么样的,底层到底是怎么实现的,这几天调试程序看了些源码,写下来做个记录.由于Spring框架博大精深,个人理解的难免有不正确的 ...
- CSS3多列Multi-column布局
Properties 属性 CSS Version 版本 Inherit From Parent 继承性 Description 简介 columns css3 无 设置或检索对象的列数和每列的宽度. ...
- Jquery 搜索框自动提示
为文本框增加自动提示下拉功能,比如输入 1,则从后台数据库查询出包含1 的字段,在文本框增加下拉列表供用户选择 ajax 返回数据为搜索查询字段的json集合 <script src=" ...
- tr td 移动变色
jsp <table id="tableList" class="table table-hover"></table> css .t ...