android——屏幕适配

一、屏幕适配的重要性

在 Android 开发中,屏幕适配是非常关键的。因为 Android 设备具有各种各样的屏幕尺寸、分辨率和像素密度。如果没有进行良好的屏幕适配,应用可能会出现显示不完整、元素拉伸或压缩变形、字体大小不合适等问题,极大地影响用户体验。

二、基本概念

  1. 屏幕尺寸(Screen Size)
    • 指的是屏幕的对角线长度,通常以英寸(inch)为单位。例如,常见的手机屏幕尺寸有 5.5 英寸、6.1 英寸等,平板屏幕尺寸可能有 7 英寸、10 英寸等。不同的屏幕尺寸需要考虑布局的调整,以确保内容在各种尺寸的屏幕上都能合理展示。
  2. 分辨率(Resolution)
    • 表示屏幕上像素的数量,通常用水平像素数 × 垂直像素数来表示,如 1920×1080。高分辨率屏幕能够显示更清晰的图像,但也意味着需要合理安排布局和资源,避免元素过小或过大。
  3. 像素密度(Density)
    • 是指每英寸屏幕所包含的像素数量,单位是 dpi(dots per inch)。例如,低密度屏幕(ldpi)的像素密度约为 120dpi,中密度屏幕(mdpi)约为 160dpi,高密度屏幕(hdpi)约为 240dpi,超高密度屏幕(xhdpi)约为 320dpi 等。不同的像素密度会影响图像资源的清晰度,需要为不同密度的屏幕提供合适的资源。

三、适配方法

  1. 布局适配
    • 使用相对布局(RelativeLayout)和线性布局(LinearLayout)
      • 相对布局可以通过设置控件之间的相对位置关系来实现灵活的布局。例如,可以将一个按钮设置为相对于另一个按钮的右边或者下方。线性布局则可以按照水平或垂直方向排列子控件,并且可以通过设置权重(weight)来分配子控件在布局中的空间比例。
      • 示例:
        • 在一个线性布局中,有两个按钮,想要让它们平分屏幕宽度,可以将线性布局的方向设置为水平,然后为两个按钮设置相同的权重。
         
        <LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><Buttonandroid:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:text="Button 1"/><Buttonandroid:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:text="Button 2"/>
        </LinearLayout>
        
    • 使用百分比布局(Percent Support Library)
      • 这是一个支持库,它允许通过百分比来设置视图的大小和位置。可以在布局文件中精确地指定一个视图占父视图宽度或高度的百分比。
      • 示例:
        • 要让一个 TextView 占据父视图宽度的 50%,可以这样设置:

        <android.support.percent.PercentFrameLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:layout_width="0dp"android:layout_height="wrap_content"app:layout_widthPercent="50%"android:text="This is a TextView"/>
        </android.support.percent.PercentFrameLayout>
        
    • 使用约束布局(ConstraintLayout)
      • 这是 Android Studio 中推荐的布局方式,它通过约束来定义视图的位置和大小。可以在可视化编辑器中方便地添加和编辑约束条件。
      • 例如,要让一个视图在父视图的中心,可以添加以下约束:
        • 视图的水平中心与父视图的水平中心对齐,垂直中心与父视图的垂直中心对齐。

        <androidx.constraintlayout.widget.ConstraintLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:id="@+id/textView"android:layout_width="wrap_content"android:layout_height="wrap_content"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toTopOf="parent"android:text="Centered Text"/>
        </androidx.constraintlayout.widget.ConstraintLayout>
        
  2. 尺寸资源适配
    • 创建不同维度的资源文件
      • 根据不同的屏幕尺寸(如小屏幕、正常屏幕、大屏幕、超大屏幕)创建对应的尺寸资源文件。例如,在res/values - smallres/values - normalres/values - largeres/values - xlarge等文件夹下分别定义尺寸值。
      • 以定义文本大小为例,在res/values - small文件夹下的dimens.xml文件中可以定义较小的文本尺寸:
         
        <resources><dimen name="text_size">12sp</dimen>
        </resources>
        

        而在res/values - normal文件夹下的dimens.xml文件中可以定义适中的文本尺寸:
         
        <resources><dimen name="text_size">14sp</dimen>
        </resources>
        
    • 使用限定符(Qualifiers)
      • 除了屏幕尺寸,还可以使用像素密度限定符(如mdpihdpixhdpi等)、方向限定符(land表示横向,port表示纵向)等来提供不同的资源。
      • 例如,为不同像素密度的屏幕提供不同的图片资源。将一张图片的不同分辨率版本分别放在drawable - mdpidrawable - hdpidrawable - xhdpi等文件夹下。Android 系统会根据设备的像素密度自动选择合适的图片进行显示。
  3. 代码适配
    • 获取屏幕参数并动态调整布局
      • 在代码中可以通过DisplayMetrics类获取屏幕的参数,如屏幕密度、分辨率等,然后根据这些参数动态地调整视图的大小和位置。
      • 示例:
        • 以下代码可以获取屏幕密度并根据密度来设置视图的大小:

        DisplayMetrics displayMetrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
        float density = displayMetrics.density;
        Button button = findViewById(R.id.button);
        // 根据屏幕密度设置按钮的宽度
        button.setWidth((int)(100 * density));
        
    • 使用自适应框架(如 AutoSize)
      • 有一些开源的框架可以帮助进行屏幕适配,例如 AutoSize。它可以自动根据屏幕宽度适配字体大小和视图大小,减少手动适配的工作量。

屏幕适配是一个综合性的工作,需要结合布局、资源和代码等多种方式,以确保应用在各种 Android 设备上都能有良好的显示效果。

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

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

相关文章

oscp学习之路,Kioptix Level2靶场通关教程

oscp学习之路&#xff0c;Kioptix Level2靶场通关教程 靶场下载&#xff1a;Kioptrix Level 2.zip 链接: https://pan.baidu.com/s/1gxVRhrzLW1oI_MhcfWPn0w?pwd1111 提取码: 1111 搭建好靶场之后输入ip a看一下攻击机的IP。 确定好本机IP后&#xff0c;使用nmap扫描网段&…

第二十六周机器学习笔记:PINN求正反解求PDE文献阅读——正问题

第二十六周周报 摘要Abstract文献阅读《Physics-informed neural networks: A deep learning framework for solving forward and inverse problems involving nonlinear partial differential equations》1. 引言2. 问题的设置3.偏微分方程的数据驱动解3.1 连续时间模型3.1.1 …

【安全编码】Web平台如何设计防止重放攻击

我们先来做一道关于防重放的题&#xff0c;答案在文末 防止重放攻击最有效的方法是&#xff08; &#xff09;。 A.对用户密码进行加密存储使用 B.使用一次一密的加密方式 C.强制用户经常修改用户密码 D.强制用户设置复杂度高的密码 如果这道题目自己拿不准&#xff0c;或者…

中关村科金智能客服机器人如何解决客户个性化需求与标准化服务之间的矛盾?

客户服务的个性化和标准化之间的矛盾一直是一个挑战。一方面&#xff0c;企业需要提供标准化的服务以保持运营效率和成本控制&#xff1b;另一方面&#xff0c;为了提升客户满意度和忠诚度&#xff0c;企业又必须满足客户的个性化需求。为此&#xff0c;中关村科金推出了智能客…

Agent 案例分析:金融场景中的智能体-蚂蚁金服案例(10/30)

Agent 案例分析&#xff1a;金融场景中的智能体 —蚂蚁金服案例 一、引言 在当今数字化时代&#xff0c;金融行业正经历着深刻的变革。随着人工智能技术的飞速发展&#xff0c;智能体&#xff08;Agent&#xff09;在金融场景中的应用越来越广泛。蚂蚁金服作为金融科技领域的…

STM32F407 | Embedded IDE01 - vscode搭建Embedded IDE开发环境(支持JLINK、STLINK、DAPLINK)

导言 Embedded IDE官网:https://em-ide.com/docs/intro 我猜肯定有部分人使用SI Keil开发STM32项目&#xff0c;也有vscode Keil开发STM32程序。SI或vscode编写代码&#xff0c;然后切换Keil编译、下载、调试程序。有一段时间&#xff0c;我也是这么干的。但是&#xff0c;程…

光谱相机的工作原理

光谱相机的工作原理主要基于不同物质对不同波长光的吸收、反射和透射特性存在差异&#xff0c;以下是其具体工作过程&#xff1a; 一、光的收集 目标物体在光源照射下&#xff0c;其表面会对光产生吸收、反射和透射等相互作用。光谱相机的光学系统&#xff08;如透镜、反射镜…

html + css 淘宝网实战

之前有小伙伴说&#xff0c;淘宝那么牛逼你会写代码&#xff0c;能帮我做一个一样的淘宝网站吗&#xff0c;好呀&#xff0c;看我接下来如何给你做一个淘宝首页。hahh,开个玩笑。。。学习而已。 在进行html css编写之前 先了解下网页的组成和网页元素的尺寸吧 1.网页的组成 …

【不太正常的题】LeetCode.232:用栈的函数接口实现队列

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;初阶数据结构刷题 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 &#x1f697; 1.问题描述&#xff1a; 题目中说了只能使用两个栈实现队列&#xff0c;并且只能使用…

Linux搭建text-generation-webui框架,安装通义千问大模型,开放对外api,voxta测试对话图文教程

目录 text-generation-webui部分 开放对外API 通义千问部分 远程API对话测试部分 text-generation-webui部分 本来不想发这个文章的&#xff0c;但是自己部署的时候看了挺多人的帖子&#xff0c;很多发的不全面&#xff0c;要么就是跟着他们流程走有些小问题啥的&#xff…

QT程序发布后,mysql在其它电脑设备无法连接数据库

QT程序发布后&#xff0c;mysql在其它电脑设备无法连接数据库 D:\mysql-5.7.24-winx64\lib, mysql-5.7.24-winx64是一个压缩包&#xff0c;用于启动mysql服务&#xff0c;创建数据库 压缩包 解决方法&#xff1a; 拷贝库到exe的相同目录&#xff0c;libmysql.dll,libmysql.li…

Nginx单向链表 ngx_list_t

目录 基本概述 数据结构 接口描述 具体实现 ngx_list_create ngx_list_init ngx_list_push 使用案例 整理自 nginx 1.9.2 源码 和 《深入理解 Nginx&#xff1a;模块开发与架构解析》 基本概述 Nginx 中的 ngx_list_t 是一个单向链表容器&#xff0c;链表中的每一个节…

软件项目需求分析的实践探索(1)

一、项目启动与规划 组建团队 包括项目经理、系统分析师、业务分析师以及可能涉及的最终用户代表和领域专家等。例如&#xff0c;开发一个医疗管理软件&#xff0c;就需要有医疗行业的专家参与&#xff0c;确保对医疗业务流程有深入理解。明确各成员的职责&#xff0c;如系统分…

网络管理-期末项目(附源码)

环境&#xff1a;网络管理 主机资源监控系统项目搭建 &#xff08;保姆级教程 建议点赞 收藏&#xff09;_搭建网络版信息管理系统-CSDN博客 效果图 下面3个文件的项目目录(python3.8.8的虚拟环境) D:\py_siqintu\myproject5\Scripts\mytest.py D:\py_siqintu\myproject5\Sc…

MySQL 常用程序介绍

以下是一些常用的MySQL程序&#xff1a; 程序名作⽤mysqldMySQL的守护进程即 MySQL 服务器&#xff0c;要使⽤MySQL 服务器 mysqld必须正在运⾏状态mysql MySQL客⼾端程序&#xff0c;⽤于交互式输⼊ SQL 语句或以批处理模式从⽂件执⾏SQL的命令⾏⼯具 mysqlcheck⽤于检查、修…

Redis篇--常见问题篇4--大Key(Big Key,什么是大Key,影响及使用建议)

1、概述 大Key&#xff1a;通常是指值&#xff08;Value&#xff09;的长度非常大&#xff0c;实际上键&#xff08;Key&#xff09;长度很大也算。通常来说&#xff0c;键本身不会很长&#xff0c;占用的内存较少&#xff0c;因此判断一个键是否为bigKey主要看它对应的值的大…

ModbusTCP从站转Profinet主站案例

一. 案例背景 在复杂的工业自动化场景中&#xff0c;企业常常会采用不同品牌的设备来构建生产系统。西门子SINAMICS G120变频器以其高性能、高精度的速度和转矩控制功能&#xff0c;在电机驱动领域应用广泛。施耐德M580可编程逻辑控制器则以强大的逻辑控制和数据处理能力著称&…

微信小程序-基于Vant Weapp UI 组件库的Area 省市区选择

Area 省市区选择&#xff0c;省市区选择组件通常与 弹出层 组件配合使用。 areaList 格式 areaList 为对象结构&#xff0c;包含 province_list、city_list、county_list 三个 key。 每项以地区码作为 key&#xff0c;省市区名字作为 value。地区码为 6 位数字&#xff0c;前两…

智驾感知「大破局」!新一轮混战开启

随着智能驾驶搭载率的攀升&#xff0c;舱外传感器赛道迎来新变局。 一方面&#xff0c;从近几年智驾传感器的配置变化来看&#xff0c;摄像头的主导地位显而易见。 12月10-12日&#xff0c;由德赛西威总冠名的2024&#xff08;第八届&#xff09;高工智能汽车年会暨年度金球奖…

Kibana8.17.0在mac上的安装

1、Kibana是什么 Kibana是与elasticsearch配套使用的数据分析与可视化工具&#xff0c;通过Kibana可以轻松与es中存储的数据进行高效的交互&#xff0c;包括数据写入、检索、删除等操作&#xff0c;并可以通过编写部分代码将数据做成各种报表&#xff0c;从而进行非常直观的统…