Android 设备兼容性使用详解

news2024/11/17 17:54:38

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 feature
    disableCompassFeature();
}

八、 兼容不同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 APIs
    disableDragAndDrop();
}

参考文献:

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

友情推荐:

Android 开发干货集锦

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

0a7c99e6c15278dd7b0ac43dd4db8ad3.jpeg

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/809787.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TortoiseGit安装与配置

注&#xff1a;在安装TortoiseGit之前我已经安装了git工具。 二、Git的诞生及环境配置_tortoisegit安装包_朱嘉鼎的博客-CSDN博客 1、TortoiseGit简介 TortoiseGit是基于TortoiseSVN的Git版本的Windows Shell界面。它是开源的&#xff0c;可以完全免费使用。 TortoiseGit 支持…

redis突然变慢问题定位

CPU 相关&#xff1a;使用复杂度过高命令、数据的持久化&#xff0c;都与耗费过多的 CPU 资源有关 内存相关&#xff1a;bigkey 内存的申请和释放、数据过期、数据淘汰、碎片整理、内存大页、内存写时复制都与内存息息相关 磁盘相关&#xff1a;数据持久化、AOF 刷盘策略&…

v.sqlflow.cn 上线试用

马哈鱼数据血缘工具从2023年8月开始开通国内云版本的服务&#xff0c;相比国外版本&#xff0c;访问速度有很大的提升&#xff0c;访问域名为 https://v.sqlflow.cn. 2023年8月和9月注册的用户可免费获得价值 3000 元的一年高级帐户&#xff0c;可以使用马哈鱼数据血缘工具全部…

DCGAN对抗网络用于生成动漫卡通人物(Python代码)

DCGAN全称Deep Convolutional Generative Adversarial Networks&#xff0c;中文名深度卷积对抗网络。 1.1 DCGAN的特点 DCGAN除了G网络与CNN不同之外&#xff0c;它还有以下的不同&#xff1a; 1.取消所有pooling层。G网络中使用转置卷积&#xff08;transposed convolutiona…

集合中的数据结构

栈 先进后出入口跟出口在同一侧 队列 先进先出入口跟出口在不同的一层 数组 查询快、增删慢查询快是因为数组的地址是连续的&#xff0c;我们通过数组的首地址就可以找到数组&#xff0c;之后通过数组的下标就可以访问数组的每一个元素。增删慢是因为数组的长度是固定的&…

计算机论文中名词翻译和解释笔记

看论文中一些英文的简写不知道中文啥意思&#xff0c;或者一个名词不知道啥意思。 于是自己做了一个个人总结。 持续更新 目录 SoftmaxDeep Learning(深度学习)循环神经网络(Recurrent Neural Network简称 RNN)损失函数/代价函数(Loss Function)基于手绘草图的三维模型检索(Ske…

区块链 2.0笔记

区块链 2.0 以太坊概述 相对于比特币的几点改进 缩短出块时间至10多秒ghost共识机制mining puzzle BTC:计算密集型ETH&#xff1a;memory-hard(限制ASIC) proof of work->proof of stake对智能合约的支持 BTC&#xff1a;decentralized currencyETH&#xff1a;decentral…

一篇文章搞定克拉美罗界(CRB)

起因&#xff1a; 二郎最近在研究LBL&#xff08;长基线&#xff09;定位&#xff0c;大部分论文都提到了文中算法获得的方差接近CRB&#xff0c;所以自己的算法性能较好。于是二郎就想知道克拉美罗界是什么意思&#xff0c;以及能应用的场景。 经过&#xff1a; 1&#xff…

python整理

Python 整理&#xff08;更新中&#xff09; 一、环境搭建 1- 下载python解析器 下载地址&#xff1a;https://www.python.org/ 2- 安装解析器: 3.pycharm 安装操作 1- 下载pycharm 下载地址: https://www.jetbrains.com/pycharm/ pycharm开发第一个Python程序 在这…

20.0 HTTP 通信

1. web开发 1.1 web开发介绍 Web指的是World Wide Web(万维网), 是一种基于互联网的信息系统. 万维网由一系列通过超文本链接相互连接的页面组成, 这些页面中包含了文本, 图像, 音频, 视频等多媒体内容. 用户可以通过浏览器访问万维网上的网页, 并通过超链接在不同页面之间导…

Flowable-中间事件-消息中间捕获事件

定义 消息中间事件指在流程中将一个消息事件作为独立的节点来运行。它是一种捕获事件&#xff0c;当流程 执行到消息中间事件时就会中断在这里&#xff0c;一直等待被触发&#xff0c;直接到该事件接收到相应的消息后&#xff0c;流 程沿后继路线继续执行。消息事件是一种引用…

网络编程(10) : 从connect到三次握手建立连接,再从close到四次挥手断开连接

1、TCP前置知识 1.1什么是TCP TCP 是面向连接的、可靠的、基于字节流的传输层通信协议。 面向连接&#xff1a;必须是一对一建立连接后才能通信可靠的&#xff1a;无论网络链路出现怎么样的变化&#xff0c;TCP可以保证报文一定能被对端收到字节流&#xff1a;流式协议&#…

QGraphicsView实现简易地图1『加载离线瓦片地图』

最简单粗暴的加载方式&#xff0c;将每一层级的所有瓦片地图全部加载 注&#xff1a;该方式仅能够在瓦片地图层级较低时使用&#xff0c;否则卡顿&#xff01;&#xff01;&#xff01; 瓦片地图数据来源&#xff1a;水经注-高德地图-卫星地图 瓦片地图瓦片大小&#xff1a;25…

损失函数篇 | YOLOv8 更换损失函数之 MPDIoU | 《2023 一种用于高效准确的边界框回归的损失函数》

论文地址:https://arxiv.org/pdf/2307.07662v1.pdf 边界框回归(Bounding Box Regression,BBR)在目标检测和实例分割中得到了广泛应用,是目标定位的重要步骤。然而,对于边界框回归的大多数现有损失函数来说,当预测的边界框与真值边界框具有相同的长宽比,但宽度和高度的…

想学Python高级编程?必须了解这个小技巧:match-case!

大家好&#xff0c;这里是程序员晚枫&#xff0c;小破站/知乎/小红书/抖音都叫这个名字。 上次给大家分享了Python高级编程第一讲&#xff1a;从使用类型提示开始 &#xff1b;今天分享Python高级编程第二讲&#xff1a;深入解析Python中switch case的使用方法。 写在前面 分…

Python时间处理:探索time模块

日常工作中&#xff0c;经常涉及到一些时间的转换操作&#xff0c;比如某些业务针对时间的操作要转成不同的时区&#xff0c;有的要转换格式入库&#xff0c;有的需要跟时间对比等等&#xff0c;接下来我们一起来看一下python里面是怎么去处理时间的。 time模块简单介绍 Python…

C语言实现扫雷游戏

test.c源文件 - 扫雷游戏测试 game.h头文件 - 扫雷游戏函数的声明 game.c源文件 - 扫雷游戏函数的实现 1.布置雷 -- 存放雷的雷盘 9*9 数组设计成11*11 上下左右方各多一行&#xff0c;保证周围8的范围 雷 - 1 不是雷 - 0 2.排查雷 主题测试源文件代码 &…

MySQL基础扎实——如何优化DISTINCT

在优化 MySQL 中的 DISTINCT 查询时&#xff0c;以下是一些常见的方法和技巧&#xff1a; 索引优化&#xff1a;为涉及 DISTINCT 的列创建索引。索引可以加速列值的查找和比较&#xff0c;以提高查询性能。请注意&#xff0c;在表中存在大量重复值的情况下&#xff0c;索引可能…

[个人笔记] vCenter设置时区和NTP同步

VMware虚拟化 - 运维篇 第三章 vCenter设置时区和NTP同步 VMware虚拟化 - 运维篇系列文章回顾vCenter设置时区和NTP同步&#xff08;附加&#xff09;ESXi设置alias参考链接 系列文章回顾 第一章 vCenter给虚机添加RDM磁盘 第二章 vCenter回收活跃虚拟机的剩余可用空间 vCente…

JavaEE——文件操作和IO

文章目录 一、认识什么是文件二、Java对文件的操作三、文件内容读写——数据流1. 对字节流中的读操作解释2.对字节流中写操作解释3.解释 input 、output 和 closs() 方法4. Scanner 在文件中的使用 四、简单使用代码操作文件 一、认识什么是文件 狭义的文件&#xff1a; 指的是…