android动画鸿阳,Android屏幕适配,目前完美
描述
Android开发最经常遇到也是一个比较烦人的问题就是UI的适配问题了。
比如:
1、最常见的就是在小米手6适配好了之后,测试用了一个OPPO R9测试,发现你的控件比小米手机显示的的要宽。
2、还有就是明明是同样的尺寸,同样的分辨率的手机手机宽度的dpi竟然也不相同.....
图0
造成上面的问题主要是不同尺寸、分辨率、系统的rom不同造成的,以下是我的一些测试:
红米note 分辨率:1280720 / 尺寸:5.5 / dpi:360
三星s7 分辨率:25601440模式 / 尺寸:5.1 / dpi:360
三星s7 分辨率:19201080模式 / 尺寸:5.1 / dpi:360
乐视2 分辨率:19201080 / 尺寸:5.5 / dpi:411
OPPO R9 分辨率:19201080 / 尺寸:5.5 / dpi:360
华为mate9 分辨率:19201080 / 尺寸:5.9 / dpi:393
小米max2 分辨率:19201080 / 尺寸:6.44 / dpi:392
小米5 分辨率:19201080 / 尺寸:5.1 / dpi:360
这里的dpi代表屏幕的宽有多少dp
我们先聊聊我自己的适配历程吧
第一阶段
图1
我选择了 Android studio里 pixel2 和 nexus 5x两个当做基准,使用 px=dp(dpi/160) 使用算出了一套方案
图2
图3
当时的文件找不到了,里面的数值可能不对哈,包含一下
就这样使用了一段时间,也没有出现什么大问题,但是每当遇到一些精细一些的布局时就会发现总是会出现误差,就得使用一些其他的方法来弥补(修改一些值,强烈不推荐)
第二阶段
第一阶段的升级,根据屏幕的分辨率增加了几个适配方案
图4
虽然增加了不同分辨率的适配但是开始的问题2还是没有解决啊,该出现的问题还是出现
第三阶段
手机屏幕的适配主要还是宽度的适配
smallestWidth适配,或者叫sw限定符适配。指的是Android会识别屏幕可用高度和宽度的最小尺寸的dp值(其实就是手机的宽度值),然后根据识别到的结果去资源文件中寻找对应限定符的文件夹下的资源文件。
和我的第二阶段原理上是一样的都是根据系统的规则来选择对应的文件,但是第二阶段如果碰见屏幕不是很正常的分辨率(比如现在的一大波全面屏)时就得向下寻找可能本来1080p的手机用了720p的适配方案(打个比方)。
通过我开始的测试发现大多数的手机横向的dpi都是360(包括720p屏幕)
smallestWidth适配的好处就是,如果找不到对应的value-sw文件就会向下寻找最近的适配,由于大多数手机都是宽度的dpi都360,我们就围绕360左右来做几套方案
图5
其实现在小于360dpi的手机暂时还没有发现,360以下的只做了两个,360以上的做的多一些,再多的话就有些浪费空间了,毕竟一个文件也有好几十kb了,通过以上方法几乎完美的解决了我碰见的适配问题
参考文章
下边是我在上述描述中用到的一些方法
1、获取手机宽度的dpi
DisplayMetrics dm = getResources().getDisplayMetrics();
int width = dm.widthPixels;
int dp = DisplayUtil.px2dip(this,width);
Log.d("onCreate", "dp: " + dp);
2、一键生成适配文件
public class AndroidValuesDpXml {
private final static String rootPath = "C:\\layoutvalues\\values-sw{0}dp\\";
private final static String WTemplate = "{1}dp\n";
private final static float dw = 1080;
public static void main(String[] args) {
screenString(320);
screenString(340);
screenString(360);
screenString(370);
screenString(380);
screenString(390);
screenString(400);
screenString(410);
screenString(420);
}
public static void screenString(int w) {
StringBuffer sb = new StringBuffer();
sb.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
sb.append("");
float dpi = dw / w * 160;
for (int i = 1; i < 1081; i++) {
sb.append(WTemplate.replace("{0}", i + "").replace("{1}",
change(i/(dpi/160)) + ""));
}
// sb.append(WTemplate.replace("{0}", "320").replace("{1}", w + ""));
sb.append("");
String path = rootPath.replace("{0}", w + "");
File rootFile = new File(path);
if (!rootFile.exists()) {
rootFile.mkdirs();
}
File layxFile = new File(path + "dimens.xml");
// File layyFile = new File(path + "lay_y.xml");
try {
PrintWriter pw = new PrintWriter(new FileOutputStream(layxFile));
pw.print(sb.toString());
pw.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
public static float change(float a) {
int temp = (int) (a * 100);
return temp / 100f;
}
}
android动画鸿阳,Android屏幕适配,目前完美相关推荐
- android动画鸿阳,18. Activity淡入淡出动画
本篇文章属于鸿洋大神博客学习笔记,鸿洋博客地址:http://blog.csdn.NET/lmj623565791/article/details/22990643 前言 多数情况下,我们新建的And ...
- Android高级-网易云音乐屏幕适配
为什么要进行屏幕适配 屏幕碎片化表现为以下几个方面: 1:屏幕尺寸碎片化: 2:屏幕密度碎片化 3:厂商碎片化:水滴屏,刘海屏 屏幕适配常见方式 二 谷歌推出的百分比布局 手写百分比布局; 为什么百分 ...
- Android一点 打造全功能屏幕适配AutoView
android适配是繁琐的事,分辨率多样,考虑因素多,并且ui设计图还是px单位的,这时候你就需要AutoView了,AutoView可以帮你做什么呢?写多个dimens文件? 还是需要写很多的代码? ...
- android动画延迟执行,Android 过渡动画框架
为了帮助视图层次内部和视图之间的过渡更加容易实现动画效果,Android 提供了 Transition 框架.这一套框架能够在视图之间提供一种或者多种动画过渡效果.过渡动画要解决的另一个主要问题就是对 ...
- android 动画设置延时,android – 如何在LayoutTransition动画之前消除延迟
我正在尝试在Honeycomb的新LayoutTransition类.在将视图添加到ViewGroup中时,我已经设置了将视图滑动到的位置的动画.我注意到,当首先渲染视图和LayoutTransiti ...
- android动画效果 translate,Android利用translate、scale、alpha、rotate实现动画效果
Android利用translate.scale.alpha.rotate实现动画效果 在Android中可以用animation实现动画效果,Android中的animation由四种类型组成: a ...
- android动画送礼物,Android仿直播类app赠送礼物功能
直播界面 实现的是播放本地的视频文件: /** * 直播界面,用于对接直播功能 */ public class LiveFrag extends Fragment { private ImageVie ...
- android动画文档,Android 动画系统汇总
Android动画系统的种类: 1. 属性动画 (Property Animation) 2. 补间动画 (Tween Animation) 3. 帧动画 (Frame Animation) ...
- android 动画之漂移,Android之自定义Drawable实现灵动的红鲤鱼动画(上篇)
此篇中的小鱼动画是模仿国外一个大牛做的flash动画,第一眼就爱上它了,简约灵动又不失美学,于是抽空试着尝试了一下,如下是我用Android实现的效果图: 由于整个绘制分析过程比较繁琐所以灵动的红鲤鱼 ...
最新文章
- 7.unity插件T4M使用
- 计算机键盘是编码键盘还是非编码键盘,矩阵按键原理图_矩阵按键扫描实例
- java 0000 0001 0002 000a 000b_Java代码编译后的class文件
- python os.removedirs() 和shutil.rmtree()(os.removedirs用于删除非空文件夹和子文件夹、shutil.rmtree用于删除文件夹下所有文件夹和文件)
- 由Android 65K方法数限制引发的思考
- 实践2.4 ELF文件格式分析
- P3250 [HNOI2016]网络(整体二分)
- Kubectl指令集
- mysql数据库 day05
- 应用重连时间_App Store 无法正常下载应用,一直转圈的处理办法
- 15、工作流Web流程设计器及表单设计器
- python模拟手机app签到_Python实现云之家自动签到
- 黑马程序员vue前端基础教程-4个小时带你快速入门vue
- python贪吃蛇简单代码_Python贪吃蛇简单的代码
- 在Eclipse中如何快速的计算代码量
- 使用手机摄像头做网络ip摄像头用opencv中打开
- Ionic页面的生命周期 (事件)
- 【最新】白piao迅雷的下载速度(迅雷11亲测好用)
- 弹孔,血迹 等受击表现
- java win7 管理员权限_获得WIN7管理员权限(可通过修改注册表,或者组策略改变)...