android碎片化的解决方法,解决 Android 设备碎片化--屏幕适配
随着支持 Android 系统的设备(手机、平板、电视、手表)的增多,设备碎片化、品牌碎片化、系统碎片化、传感器碎片化和屏幕碎片化的程度也在不断地加深。
在当时初学 Android 的时候,就初步接触了这方面的概念。当时学了六大布局:
布局 PK
当时说了绝对布局已经是被淘汰了的,就是因为它不满足屏幕适配。还有一种百分比布局,控件的位置是按百分比来控制的,在任何尺寸的手机屏幕上整体格局都是这样显示的,不会乱。
** 扩展小知识 **
** 屏幕尺寸 **:屏幕尺寸是指手机的对角线,单位是英寸, 1 英寸 = 2.54 厘米。现在常见的屏幕有 4.7(我的红米 note 2,现在很少看见手机屏幕比我小的了)、5.0、 5.5、 6.0等等。
屏幕尺寸
**上图中的 px :pixels,像素的意思,上图中手机 分辨率 为宽 1080 px,高 1920px。 px 也就是 分辨率的单位,一个像素就是一个小点,说明宽度有 1080 个像素小点 **
** 像素密度(dpi: dots per inch) **:英文直译过来就是每英寸点数。即 dpi = px / 英寸。
dpi 分类
4 英寸 hdpi
图标的各屏幕密度的对应尺寸
** dip(dp) ( Devices Independent Pixels, 设备独立像素):顾名思义,这个每一个设备独立使用的像素,在不同的设备上有不同的效果,正是用来解决屏幕适配的单位。这里我一直都不是很明白,后面想了个比喻: 它可以看成上面像素单位的一个包装,这里一像素可能等于上面几像素,也有可能等于零点几像素,这个关系由像素密度来决定,像素密度为 160 的时候, 1dip = 1px。 素密度越高,一个独立像素为多个像素 **。
这个有两个转换工具方法
public static int dip2px(Context context, float dipValue){
final float scale = context.getResources().getDisplayMetrics().density;
return (int)(dipValue * scale + 0.5f);
}
public static int px2dip(Context context, float pxValue){
final float scale = context.getResources().getDisplayMetrics().density;
return (int)(pxValue / scale + 0.5f);
}
** sp (Scaled Pixels) **:缩放像素,主要用来设置字体大小, best for textSize。
** 备注:根据谷歌的推荐,像素统一使用 dp, 字体统一使用 sp **
怎么实现屏幕适配啊
一、竖屏
使用 wrap_content:视图的宽度或高度设置成所需的最小尺寸以适应视图中的内容
使用 match_parent: 展开组件以匹配其父视图的尺寸
这面两个只能解决一些简单的问题。
weight,权重:在 LinearLayout 中使用,用于分配控件占总体的百分比。
** 注意 **:
一般使用权重设置时,最好设对应宽高为 0dp, 减少测量工作。
当控件宽高为 match_parent 时,控件设置的权重与总体成反比;
当控件宽高为 wrap_content 时,控件设置的权重与总体成正比;
当只有部分控件设置了权重时,先确定没设置权重控件的宽高,再按剩下部分按比例分配。
谷歌推荐:像素使用 dp, 字体使用 sp
提供备用位图
备用位图
使用点九图:点九图可以指定图片中部分区域拉伸,从而使图片很多场合方法而不失真。
使用百分比布局:百分比布局直接支持百分比设置控件的宽高。这样在任何尺寸的屏幕上,控件大小都是一样的。
谷歌提供了相关支持包( android-support-percent-lib),记得使用前添加相关 jar 包或者依赖哦。它提供了两种布局,percentRelativeLayout 继承自 RelativeLayout;percentFrameLayout 继承自 FrameLayout。
百分比布局的相关属性:
百分比布局的相关属性
二、横竖屏或手机与平板同时适配
2.1 使用限定符
2.1.1 最小尺寸限定符 res/layout(layout-large)
单面板布局:res/layout/activity_main.xml
双面板布局:res/layout_large/activity_main.xml
2.1.2 最小宽度限定符 res/layout(layout-sw600dp)
** 但 Android 版本低于 3.2 的设备不支持此技术,原因是这些设备无法将 sw600dp 识别为尺寸限定符,因此我们仍需使用 large 限定符。 **
** 定义 **:通过指定某个最小宽度(以 dp 为单位)来设置屏幕的大小,从而决定是否双面板显示。
例如使用 sw600p 指明双面板布局尽适用最小宽度为 600dp 的屏幕,而不是适用 large 限定符。标准 7 英寸平板电脑的最小宽度为 600dp。
单面板布局:res/layout/activity_main.xml
双面板布局:res/layout-sw600dp/activity_main.xml
2.1.3 屏幕方向限定符 land port
2.2 使用布局别名 activity_main.xml(activity_main_large.xml)
** 步骤 1** :设置好相应布局
对应布局
** 步骤 2 **:设置大尺寸屏幕引用的布局
设置大尺寸屏幕应用的布局
** 步骤 3 **:设置 600dp 尺寸屏幕引用的布局
设置 600dp 尺寸屏幕引用的布局
** 说明 **:
说明
android碎片化的解决方法,解决 Android 设备碎片化--屏幕适配相关推荐
- Win10下fastboot找不到设备解决方法(Android平板)
Win10下fastboot找不到设备解决方法(Android平板) 如下情况: 1.点击此电脑右击选择管理-设备管理器 2.打开cmd命令框,输入adb reboot fastboot,使平板进入f ...
- LNK1104:无法打开文件kernel32.lib的解决方法解决方法
系统:64位WIN7系统 安装版本:Visual Studio Professional 2013 90 天试用 出现fatal error LNK1104:无法打开文件kernel32.lib的解决 ...
- Android模拟器没有键盘的解决方法,Android DPAD not enabled in AVD
第一: http://blog.sina.com.cn/s/blog_6f72ff900102v8bl.html 之所以没有键盘是因为创建模拟器的时候没有选择Skin,像下图这样选择一个Skin即可以 ...
- android一般会重载7个方法,《Android技术应用》答案(2013年)
黄冈职业技术学院电子信息学院 <Android技术应用>考试试卷答案 1.我们用称为原始数据类型. 2.为了使android适应不同分辨率机型,布局时字体单位应用,像素单位应用 sp 和 ...
- 英雄启动出错解决方法_超纯水设备高压泵不启动解决方法
当我们发现超纯水设备系统高压泵不启动的时候,不要直接就认为是设备内在的情况,这时候应该检查外部的电线连接,以及是否停电的问题,这是为基本的一些情况.有些时候出现了停电的问题,自然设备就不能够启动,我们 ...
- javax.servlet.ServletException: java.lang.NoSuchMethodError 解决方法解决办法
最近在给客户做一个项目,由于修改了一个字段的类型,本地测试都没有问题,但是服务器上一部分是正确的,一部分不正确,同样的一个实体类的一个字段.报错信息入下: 解决办法: 1.进入你tomcat安装目录: ...
- 插入MathType公式行距变大的解决方法解决Word中MathType公式显示不全问题
一.插入MathType公式行距变大的解决方法 Word文档中插入用MathType编辑的公式后,经常会发现行距明显变大,就好像插入的公式把行与行之间给撑开了一样. 设置页面格式 在Word文档状态下 ...
- android设置主题的方法,Android_修改Android App样式风格的方法,android中可以自定义主题和风格 - phpStudy...
修改Android App样式风格的方法 android中可以自定义主题和风格.风格,也就是style,我们可以将一些统一的属性拿出来,比方说,长,宽,字体大小,字体颜色等等.可以在res/value ...
- com.android.phone已停止运行怎么解决方法,com.android.phone已停止运行怎么解决
在安卓手机上,不少用户都会遇过com.android.phone已停止的弹窗,尤其经常刷机的最明显.导致的原因实在太多,有刷机步骤不对的,乱改系统文件的,这里小编综合网上的情况以及自身经历,给广大安卓 ...
最新文章
- oracle fmis 是什么系统?,FMSQL
- SpringCloud eureka服务状态监听
- Spring事务TransactionProxyFactoryBean属性-transactionAttributes的意义
- .net core 2.0学习记录(一):搭建一个.Net Core网站项目
- 计算机窗口预览图,window_Win7系统资源管理器加上预览窗格功能的方法, 图片缩略图是否太小?PPT - phpStudy...
- docker 安装mysql5.6
- 从第一范式(2nf)到第二范式(3nf)_啥是数据库范式
- windows8 开发教程 教你制作 多点触控Helper可将任意容器内任意对象进行多点缩放...
- Win10下windows mobile设备中心连接不上的方法无法启动
- java毕业设计校园实习管理系统mybatis+源码+调试部署+系统+数据库+lw
- Pr 音频效果参考:立体声声像、时间与变调
- TensorFlow中相关的维度处理函数
- python库-collections模块Counter类
- ESP32 PM2.5测试
- shell 中匹配正则 字符串处理【整理版】
- a.astype用法
- 可以让男人看一遍哭一遍的文章(转贴)
- 模糊熵 matlab,近似熵/模糊熵/样本熵MATLAB代码
- 韩睿(Henry Han)的VB.NET之旅
- C#图解教程(第三章)
热门文章
- Docker 部署ELK 日志分析
- PowerDesigner概念模型详解
- 转 当当网资深DBA:DB运维四大现代化的实现
- Win10桌面右键响应非常慢怎么办?
- Android自动化测试-从入门到入门(5)AdapterView的测试
- Oracle EBS-SQL (PO-13):检查采购物料无一揽子协议价格.sql
- Extension Method (확장 메서드)
- 读研打比赛领奖金免费旅游,国内算法竞赛平台了解一下
- php中var_dump是什么意思,php中的var_dump()方法的詳細說明
- ansys用什么cpu_ANSYS图形工作站与集群配置探讨201904-1