Android 多屏适配解决方式

2023-10-24 17:40

本文主要是介绍Android 多屏适配解决方式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


1.主流手机必要測量的參数(通过详细的方法。測量出,须要測试手机的 以下的这些參数,我们主要使用的仅仅是 screenwidth  这个參数,其它參数仅仅是帮助我们更好的理解

屏幕适配)


 DisplayMetrics metric = new DisplayMetrics();
        activity.getWindowManager().getDefaultDisplay().getMetrics(metric);
        int width = metric.widthPixels;  // 屏幕宽度(像素)
        int height = metric.heightPixels;  // 屏幕高度(像素)
        float density = metric.density;  // 屏幕密度(0.75 / 1.0 / 1.5/2.0)
        int densityDpi = metric.densityDpi;  // 屏幕密度DPI(120 / 160 / 240/320)
        int screenWidth = (int) (width / density);//屏幕宽度(dp)
        int screenHeight = (int) (height / density);//屏幕高度(dp)
        AppContext.getAppContext().setDpHeight(screenWidth);
        AppContext.getAppContext().setDpWidth(screenHeight)

        Log.i("pixel", "width:" + width + "height:" + height + " density:" + density + " densitydpi" + densityDpi);

详细手机型号,相应的输出參数

华为 ht:960 density:1.5densitydpi240  screenWidth360  screenHeight640

米2      +++width:720  height:1280 density:2.0 densitydpi320  screenWidth360  screenHeight640

HM1s    +++width:720  height:1280density:2.0 densitydpi320  screenWidth360  screenHeight640

MI 3   +++width:1080  height:1920density:3.0 densitydpi480 screenWidth360  screenHeight640

GT-I9507v  +++width:1080  height:1920density:3.0 densitydpi480 screenWidth360  screenHeight640

荣耀3c     +++width:720  height:1280 density:2.0 densitydpi320  screenWidth360  screenHeight640

华为 G730-U00  +++width:540  height:960 density:1.5 densitydpi240  screenWidth360  screenHeight640

华为  A199 +++width:720  height:1280density:2.0 densitydpi320  screenWidth360  screenHeight640

努比亚Nx507J    +++width:1080  height:1920 density:3.0 densitydpi480  screenWidth360  screenHeight640

联想K910  +++width:1080 height:1920 density:3.0 densitydpi480 screenWidth360  screenHeight640 

华为P6   +++width:720 height:1184 density:2.0 densitydpi320 screenWidth360  screenHeight592

Coolpad 8675   width:720 height:1280 density:2.0 densitydpi320  width 360    height  640

华为 G520    +++width:480  height:854 density:1.5 densitydpi240  screenWidth320  screenHeight569

HTC T528w  +++width:480  height:800density:1.5 densitydpi240 screenWidth320  screenHeight533

三星 N7000  width:800height:1280 density:2.0densitydpi320 width 400 dp  height 640 dp


2.依据google api 提供的

   适配命名优先级,国家,sw參数dp  等等 ,类似 values-1920x1080 这样的书写方式,官方api上没有详细进行说明。可是经过測试的却能够使用这样的方式进行适配,缺点就是

  须要定义非常多类似这种配置參数。

3.第三点。须要在项目values -dimens(基础为系统默认提供),写下详细的适配參数,因为考虑到如今收据的screenwidth 都是在320dpi之上。所以。我们项目中使用1dp=2px 作为基础dimens适配參数,这样

  

   我们就须要依据不同的手screenwidth建立不同的 sw目录


     sw320dp

     sw360dp(较多)

     sw400dp

    sw480dp(市面上较少)

  4.依据基础适配參数320dp,假设我们须要适配360dp则须要,使用(360/320)*基础dimens參数,一側类推,假设是400dp适配,则使用(400/320)*基础dimens參数

 5.依据不同的适配须要,首先在基础dimens中进行配置,然后。測试各个手机适配情况进行对应的调整



   总结:之前适配。是从网上找的一段代码。经全部的适配条件。依据比值(0.75/1/1.5/2)事先计算好。然后须要适配的地方使用自己计算好的參数。

这样适配肯定是不行,

     后期维护成本较高,适配效果不够精细。


  以上都是手动敲上去的,。由于之前做适配,没去读google api 造成走了非常大的弯路。

google api 多屏适配上面写的都是清清楚楚的,我们參照各市面上几个较有名的apk,都是这样实现的,京东的apk大家能够反编译看看,里面的适配使用了5种之多。(这是非常笨的方式)。淘宝。微信,Facebook。sina client。均没有採用京东的做法。

     适配后的文件:


    


转载于:https://www.cnblogs.com/gccbuaa/p/7375907.html

这篇关于Android 多屏适配解决方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/276763

相关文章

SpringBoot中@Value注入静态变量方式

《SpringBoot中@Value注入静态变量方式》SpringBoot中静态变量无法直接用@Value注入,需通过setter方法,@Value(${})从属性文件获取值,@Value(#{})用... 目录项目场景解决方案注解说明1、@Value("${}")使用示例2、@Value("#{}"php

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

C++右移运算符的一个小坑及解决

《C++右移运算符的一个小坑及解决》文章指出右移运算符处理负数时左侧补1导致死循环,与除法行为不同,强调需注意补码机制以正确统计二进制1的个数... 目录我遇到了这么一个www.chinasem.cn函数由此可以看到也很好理解总结我遇到了这么一个函数template<typename T>unsigned

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

504 Gateway Timeout网关超时的根源及完美解决方法

《504GatewayTimeout网关超时的根源及完美解决方法》在日常开发和运维过程中,504GatewayTimeout错误是常见的网络问题之一,尤其是在使用反向代理(如Nginx)或... 目录引言为什么会出现 504 错误?1. 探索 504 Gateway Timeout 错误的根源 1.1 后端

解决升级JDK报错:module java.base does not“opens java.lang.reflect“to unnamed module问题

《解决升级JDK报错:modulejava.basedoesnot“opensjava.lang.reflect“tounnamedmodule问题》SpringBoot启动错误源于Jav... 目录问题描述原因分析解决方案总结问题描述启动sprintboot时报以下错误原因分析编程异js常是由Ja

Android协程高级用法大全

《Android协程高级用法大全》这篇文章给大家介绍Android协程高级用法大全,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友跟随小编一起学习吧... 目录1️⃣ 协程作用域(CoroutineScope)与生命周期绑定Activity/Fragment 中手

使用shardingsphere实现mysql数据库分片方式

《使用shardingsphere实现mysql数据库分片方式》本文介绍如何使用ShardingSphere-JDBC在SpringBoot中实现MySQL水平分库,涵盖分片策略、路由算法及零侵入配置... 目录一、ShardingSphere 简介1.1 对比1.2 核心概念1.3 Sharding-Sp

深度剖析SpringBoot日志性能提升的原因与解决

《深度剖析SpringBoot日志性能提升的原因与解决》日志记录本该是辅助工具,却为何成了性能瓶颈,SpringBoot如何用代码彻底破解日志导致的高延迟问题,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言第一章:日志性能陷阱的底层原理1.1 日志级别的“双刃剑”效应1.2 同步日志的“吞吐量杀手”

MySQL 表空却 ibd 文件过大的问题及解决方法

《MySQL表空却ibd文件过大的问题及解决方法》本文给大家介绍MySQL表空却ibd文件过大的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录一、问题背景:表空却 “吃满” 磁盘的怪事二、问题复现:一步步编程还原异常场景1. 准备测试源表与数据