当前位置: 首页 > 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)是一种…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程&#xff0c;然后使用强化学习的Actor-Critic机制&#xff08;中文译作“知行互动”机制&#xff09;&#xff0c;逐步迭代求解…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动&#xff08;如演唱会、马拉松赛事、高考中考等&#xff09;期间&#xff0c;城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例&#xff0c;暖城商圈曾因观众集中离场导致周边…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的&#xff0c;比GNOME简单得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...