当前位置: 首页 > news >正文

Android 设备兼容性使用详解

789007f864954309e07fa1d7eb24f5f1.gif

和你一起终身学习,这里是程序员Android

经典好文推荐,通过阅读本文,您将收获以下知识点:

一、设备兼容性分类
二、硬件设备兼容
三、软件 APP 兼容
四、兼容不同语言
五、兼容不同分辨率
六、兼容不同屏幕方向布局
七、兼容不同硬件 Feature
八、兼容不同SDK平台

一、设备兼容性分类

Android设计用于运行在许多不同类型的设备上,从手机到平板电脑和电视机。 作为开发人员,各种设备为您的应用程序提供了巨大的潜在受众。 为了使您的应用程序在所有这些设备上取得成功,APP应该容忍一些功能变化,并提供适应不同屏幕配置的灵活的用户界面。

兼容性分类主要分: 硬件兼容性,软件兼容性两大类。

二、硬件设备兼容

不同厂商(比如:手机厂商)生产不同尺寸的设备,此时,设备要兼容不同类型的APPGoogle也对此有强烈的要求,国外手机,必须通过CTS (兼容性测试)才可以上市售卖。国内手机由于没有预制GMS包,不用测试兼容性,故,有时候小厂商生产的手机在兼容性上可能不太完美。

三、软件 APP 兼容

作为 APP开发者,APP兼容性是必须的。兼容不同Feature,兼容不同语言、兼容不同屏幕尺寸、兼容不同分辨率,兼容不同SDK版本等

四、兼容不同语言

为了更加国际化,APP通常会兼容不同国家语言,最基本的是兼容英文,简体中文,繁体中文等

1. 文件名称命名规则如下:

values-ISO语言代码

2 .使用语法:

  • java :
    R.string.<string_name> 引用字符串资源

  • XML :
    @string/<string_name>

  • 常用语言如下:
    简体中文 values-zh-rCN
    繁体中文 values-zh-rTW 、values-zh-rHK
    美式英文 values
    英文 values-en-rGB

3. 兼容不同语言举例

Android手机兼容不同国家的语言,进而更方便用户使用。

67f7f8665756d8d98427e25027922653.jpeg

Android兼容不同国家语言

五、兼容不同分辨率

Android 运行在不同的设备上,比如手机、TV、Car等设备载体。为了分类这些载体,Android设备分两大类:

1. 屏幕大小

物理尺寸上的大小 区分如下:
small, normal, large, and xlarge

2. 屏幕密度(DPI)

屏幕像素的物理密度,区分如下:
mdpi (medium), hdpi (hdpi), xhdpi (extra high), xxhdpi (extra-extra high), and others

3. UI 标准化,常用图片兼容性总结

开发过程中适应不同图片时候的参考总结

密度建议尺寸手机屏幕密度DPI图片分辨率基准图缩放倍数
drawable-mdpi48 * 48120dpi ~ 160dpi320x4801.0
drawable-hdpi72 * 72160dpi ~ 240dpi480x800、480x8541.5
drawable-xhdpi96 * 96240dpi ~ 320dpi960*7202.0
drawable-xxhdpi144 * 144320dpi ~ 480dpi1280×7203.0
drawable-xxxhdpi192 * 192480dpi ~ 640dpi1920*10804.0

4.手机屏幕密度DPI获取方法

float xdpi = getResources().getDisplayMetrics().xdpi;
float ydpi = getResources().getDisplayMetrics().ydpi;

5. 兼容屏幕分辨率举例

55b6d8a3d4340ce1eee1c3656fc6cd57.jpeg

兼容不同屏幕分辨率

d81546e26b4c5e20265438e1183e8cda.jpeg

Android Studio推荐方法

六、 兼容不同屏幕方向布局(横向 landscape 、纵向 portrait)

虽然Android 在横竖屏切换的时候可以自适应,但是,效果经常不是太好,为了更好适应手机屏幕的旋转,横屏、竖屏需要不同的布局,进一步提升UI交互体验。

1. 兼容不同屏幕方向布局举例:

布局适应屏幕
layout默认纵向
layout-land横向布局
layout-large大屏纵向
layout-large-land大屏横向
layout-sw600dp双窗口布局,常用平板
layout-sw600dp-land双窗口布局,常用横向 平板
layout-sw720dp双窗口布局,常用平板

0ad8a7fb6a180fb70952371e7bb6455e.jpeg

兼容不同屏幕大小

七、兼容不同硬件 Feature

为了兼顾不同的手机版本,在应用使用不同的Feature时候进行判断是否支持,这样会更好的提升用户体验。
比如有些低配手机会没有陀螺仪等Feature,此时APK要兼容不容的硬件Feature

兼容 Feature 的使用方法

例如:在AndroidManifest文件中声明使用Feature

<manifest ... ><uses-feature android:name="android.hardware.sensor.compass"android:required="true" />...
</manifest>

然后在使用该Feature 功能时候进行判断取舍

PackageManager pm = getPackageManager();
if (!pm.hasSystemFeature(PackageManager.FEATURE_SENSOR_COMPASS)) {// This device does not have a compass, turn off the compass featuredisableCompassFeature();
}

八、 兼容不同SDK平台

不同的设备会运行在不同的Android版本上,比如Android 2.*、Android 4.* 、Android 5.* 、Android6.* 、Android 7.* 、Android 8.* 。

创建工程时候,在AndroidManifest.xml文件中可以选择APP 要兼容的Android版本

<manifest ... ><uses-sdk android:minSdkVersion="14" android:targetSdkVersion="19" />...
</manifest>

当然也可以在Java代码中动态判断当前设备版本,进而执行不同的代码。

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {// Running on something older than API level 11, so disable// the drag/drop features that use ClipboardManager APIsdisableDragAndDrop();
}

参考文献:

【腾讯文档】Android 基础知识库
https://docs.qq.com/doc/DSWdKRWh1VnVHYWFP

友情推荐:

Android 开发干货集锦

至此,本篇已结束。转载网络的文章,小编觉得很优秀,欢迎点击阅读原文,支持原创作者,如有侵权,恳请联系小编删除,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!

0a7c99e6c15278dd7b0ac43dd4db8ad3.jpeg

点击阅读原文,为大佬点赞!

相关文章:

Android 设备兼容性使用详解

和你一起终身学习&#xff0c;这里是程序员Android 经典好文推荐&#xff0c;通过阅读本文&#xff0c;您将收获以下知识点: 一、设备兼容性分类二、硬件设备兼容三、软件 APP 兼容四、兼容不同语言五、兼容不同分辨率六、兼容不同屏幕方向布局七、兼容不同硬件 Feature八、兼容…...

vnc加固

0x00 认识VNC 先我们看看VNC运行的工作流程&#xff1a; VNC客户端通过浏览器或VNC Viewer连接至VNC Server&#xff1b; VNC Server传送一个对话窗口至客户端&#xff0c;要求输入连接密码&#xff08;可能为空&#xff09;&#xff0c;以及存取的VNC Server显示装置&#…...

Windows下Nginx安装与配置教程

一、前言 1、Nginx是什么&#xff1f; Nginx是一个开源的Web服务器&#xff0c;同时Nginx也提供了反向代理和负载均衡的功能。 Nginx通常作为负载均衡器暴露在外网接受用户请求&#xff0c;同时也使用其反向代理的功能&#xff0c;将用户的请求转发到实际提供服务的内网服务器…...

Iterator迭代器和Generator生成器

Iterator迭代器和for/of循环原理 Iterator迭代器规范 自己创建一个Iterator类,来实现ES6中的迭代器规范: class Iterator {constructor(assemble) {// assemble:需要迭代的数据结构this.assemble = assemble// index:记录迭代的次数(或者索引)this.index = -1}// 必须具…...

Modbus-RTU协议C#实现

1、安装依赖包 System.IO.Ports 2、读协议 /// <summary>/// Modbus-RTU协议读实例/// </summary>private static void Read(){//组装一个请求报文// 01 03 00 00 00 0A C5 CDbyte slave 0x01;//byte function 0x03; //读单个寄存器byte function 0x01; //…...

Redis学习---大数据技术之Redis(NoSQL简介、Redis简介、Redis安装、五大数据类型、相关配置、持久化)

星光下的赶路人star的个人主页 毅力是永久的享受 文章目录 1、NoSQL1.1 NoSQL数据库1.1.1 NoSQL是什么1.1.2 NoSQL的特点1.1.3 NoSQL的适用场景1.1.4 NoSQL的不适场景 1.2 NoSQL家族 2、Redis简介2.1 Redis官网2.2 Redis是什么2.3 Redis的应用场景2.3.1 配合关系型数据库做高速…...

基于组合双向拍卖的共享储能机制研究(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 2.1 算例数据 2.2 买家中标 2.3 卖家中标 &#x1f389;3 文献来源 &#x1f308;4 Matlab代码实现 &#x1f4a5;1 概述 文献来源&#xff1a; 摘要&#xff1a;为满足共享储能中储能用户的互补性和替代性需求、解决常规单…...

服务机器人有哪些品类

服务机器人是指具备自主运动、感知环境、实现人机交互等能力的机器人&#xff0c;它可以被应用于不同的场景&#xff0c;如餐饮、医疗、物流等行业。根据其功能和应用场景的不同&#xff0c;服务机器人可以分为以下几类&#xff1a;1. 餐饮服务机器人 随着社会发展和人们需…...

3.netty和protobuf

1.ChannelGroup可以免遍历由netty提供,覆盖remove方法即可触发删除channel\ 2.群聊私聊 13.群聊私聊简单原理图 3.netty心跳检测机制,客户端对服务器有没有读写(读,写空闲) //IdleStateHandler(3,5,7,TimeUnite.SECONDS)是netty提供的检测状态的处理器,也加到pipeline,读,写,…...

NLP实践——Llama-2 多轮对话prompt构建

NLP实践——Llama-2 多轮对话prompt构建 1. 问题提出2. prompt的正确形式3. 效果测试4. 结尾 1. 问题提出 最近&#xff0c;META开源了Llama-2模型&#xff0c;受到了广泛的关注和好评&#xff0c;然而&#xff0c;在官方给的使用说明中&#xff0c;并没有对使用方法进行特别细…...

《TCP IP网络编程》第十四章

第 14 章 多播与广播 14.1 多播 多播&#xff08;Multicast&#xff09;方式的数据传输是基于 UDP 完成的。因此 &#xff0c;与 UDP 服务器端/客户端的实现方式非常接近。区别在于&#xff0c;UDP 数据传输以单一目标进行&#xff0c;而多播数据同时传递到加入&#xff08;注…...

网络基础-认识每层的设备和每层的特点用途

目录 网络层次常见设备各层介绍数据链路层网络层传输层应用层 网络层次 常见设备 各层介绍 数据链路层 有了MAC地址。数据链路层工作在局域网中的&#xff0c;以帧为单位进行传输和处理数据。 网络层 网络层有了IP。不同的网络通过路由器连接成为互联网 路由器的功能:   …...

【Linux操作系统】深入解析Linux定时任务调度机制-cronat指令

在Linux操作系统中&#xff0c;定时任务调度是一项重要的功能&#xff0c;它可以让用户在指定的时间或周期性地执行特定的任务。这种机制使得用户能够自动化地执行一些重复性工作&#xff0c;提高工作效率。本文将详细介绍Linux定时任务调度的原理、常用指令和代码示例&#xf…...

动手学深度学习(一)预备知识

目录 一、数据操作 1. N维数组样例 2. 访问元素 3. 基础函数 &#xff08;1&#xff09; 创建一个行向量 &#xff08;2&#xff09;通过张量的shape属性来访问张量的形状和元素总数 &#xff08;3&#xff09;reshape()函数 &#xff08;4&#xff09;创建全0、全1、…...

item_get-KS-获取商品详情

一、接口参数说明&#xff1a; item_get-根据ID取商品详情 &#xff0c;点击更多API调试&#xff0c;请移步注册API账号点击获取测试key和secret 公共参数 请求地址: https://api-gw.onebound.cn/ks/item_get 名称类型必须描述keyString是调用key&#xff08;http://o0b.cn/…...

[华为OD] 最小传输时延(dijkstra算法)

明天就要面试了我也太紧张了吧 但是终于找到了一个比较好理解的dijkstra的python解法&#xff0c;让我快点把它背下来&#xff01;&#xff01;&#xff01;&#xff01; 文章目录 题目dijkstra算法的python实现python解答dfs解法dijkstra解法 题目 先把题目放出来 某通信网络…...

问道管理:总资产大于总市值好吗?

在财政领域&#xff0c;总财物和总市值是两个非常重要的指标。总财物是指公司所有的财物&#xff0c;包括固定财物、流动财物、无形财物等&#xff0c;而总市值则是指公司股票在商场上的总价值。当总财物大于总市值时&#xff0c;这是否是一个好的信号呢&#xff1f;咱们将从多…...

IBM Spectrum LSF (“LSF“ ,简称为负载共享设施) 用户案例

IBM Spectrum LSF (“LSF” &#xff0c;简称为负载共享设施) 用户案例 IBM Spectrum LSF (“LSF” &#xff0c;简称为负载共享设施) 软件是业界领先的企业级软件。 LSF 在现有异构 IT 资源之间分配工作&#xff0c;以创建共享&#xff0c;可扩展且容错的基础架构&#xff0c…...

Pytorch深度学习-----神经网络之非线性激活的使用(ReLu、Sigmoid)

系列文章目录 PyTorch深度学习——Anaconda和PyTorch安装 Pytorch深度学习-----数据模块Dataset类 Pytorch深度学习------TensorBoard的使用 Pytorch深度学习------Torchvision中Transforms的使用&#xff08;ToTensor&#xff0c;Normalize&#xff0c;Resize &#xff0c;Co…...

Gis入门,使用起止点和两个控制点生成三阶贝塞尔曲线(共四个控制点,线段转曲线)

前言 本章讲解如何在gis地图中使用起止点和两个控制点(总共四个控制点)生成三阶贝塞尔曲线。 二阶贝塞尔曲线请参考上一章《Gis入门,如何根据起止点和一个控制点计算二阶贝塞尔曲线(共三个控制点)》 贝塞尔曲线(Bezier curve)介绍 贝塞尔曲线(Bezier curve)是一种…...

Agent的决策模糊

文章目录Langchian Agent内部记忆:信息过载LLM注意力有限的解释&#xff1a;上下文窗口长度很大&#xff0c;会有这种问题么对比langGraphLangchian Agent内部记忆: 官方 ReAct 内部机制&#xff08;铁律&#xff09; LangChain 的 AgentExecutor 在一次 invoke () 内部&#…...

基于Kubernetes Operator的MySQL InnoDB Cluster自动化部署实践

1. MySQL InnoDB Cluster与Kubernetes Operator基础 MySQL InnoDB Cluster是MySQL官方提供的高可用数据库解决方案&#xff0c;它基于MySQL Group Replication技术构建&#xff0c;能够实现多节点数据同步和自动故障转移。想象一下&#xff0c;这就像是一个由多个数据库实例组…...

颠覆传统投资分析:TradingAgents-CN智能交易系统零门槛部署指南

颠覆传统投资分析&#xff1a;TradingAgents-CN智能交易系统零门槛部署指南 【免费下载链接】TradingAgents-CN 基于多智能体LLM的中文金融交易框架 - TradingAgents中文增强版 项目地址: https://gitcode.com/GitHub_Trending/tr/TradingAgents-CN 在金融科技迅猛发展的…...

从夯到拉,大模型岗位全攻略:程序员转型指南与避坑指南

文章详细解析了大模型领域五个梯队岗位的工作内容、技能要求及发展前景&#xff0c;从底层预训练工程师到应用开发工程师&#xff0c;为不同背景的程序员提供转型建议。同时指出行业人才缺口巨大&#xff0c;传统程序员可凭借编程基础实现职业升级&#xff0c;并推荐系统学习路…...

科研党福音:Zotero+Green Frog插件一键获取期刊分区与影响因子(附easyScholar密钥配置全流程)

科研文献管理革命&#xff1a;Zotero与Green Frog插件的深度整合实践 作为一名长期浸泡在学术海洋中的研究者&#xff0c;我深知高效文献管理工具的重要性。每天面对数百篇新发表的论文&#xff0c;如何快速识别高质量文献成为决定科研效率的关键因素。传统的手动查询期刊影响因…...

从NDVI到地表温度:用ENVI Band Math一次性搞定植被与热环境分析

ENVI波段运算实战&#xff1a;NDVI与地表温度的高效批量处理技巧 遥感影像分析中&#xff0c;植被指数和地表温度是最基础却又最关键的指标。传统操作流程往往需要反复切换不同工具模块&#xff0c;既耗时又容易出错。而ENVI的Band Math功能就像一把瑞士军刀&#xff0c;能将这…...

BetterNCM Installer插件管理器:网易云音乐用户的功能扩展工具

BetterNCM Installer插件管理器&#xff1a;网易云音乐用户的功能扩展工具 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer BetterNCM Installer是面向网易云音乐PC用户的插件管理工具&…...

SystemVerilog实战:在Vivado 2023.1中实现跨文件clog2计算的3种方法

SystemVerilog实战&#xff1a;在Vivado 2023.1中实现跨文件clog2计算的3种方法 当我们将传统Verilog项目迁移到SystemVerilog环境时&#xff0c;经常会遇到$clog2函数的兼容性问题。这个看似简单的对数计算函数&#xff0c;在不同工具链和文件类型中的表现可能大相径庭。特别是…...

终极Chromium性能优化方案:Thorium浏览器让你的上网体验快如闪电

终极Chromium性能优化方案&#xff1a;Thorium浏览器让你的上网体验快如闪电 【免费下载链接】thorium Chromium fork named after radioactive element No. 90. Windows and MacOS/Raspi/Android/Special builds are in different repositories, links are towards the top of…...

Windows记事本CVE-2026-20841漏洞分析:从命令注入根因、全链路攻击链到企业级纵深防御的全维度深度复盘

在Windows系统的生态里&#xff0c;从来没有一款工具能像记事本一样&#xff0c;拥有长达40年的“绝对安全”共识。 从1985年Windows 1.0首次预装&#xff0c;到如今Windows 11的全版本覆盖&#xff0c;这个仅数百KB的纯文本编辑器&#xff0c;始终是全球用户记录备忘、清理格…...