Tim

一枚野生程序员~

  • 主页
  • 分类
  • 标签
  • 归档
  • 关于
所有文章 工具

Tim

一枚野生程序员~

  • 主页
  • 分类
  • 标签
  • 归档
  • 关于

Android屏幕适配

阅读数:次 2020-11-30
字数统计: 1.1k字   |   阅读时长≈ 4分

由于Android系统的开放性,任何用户、开发商、OEM厂商、运营商都可以对Android进行定制,修改成他们想要的样子,导致碎片化严重。Android手机的分辨率和尺寸千奇百怪,同样的软件在不同的手机上UI表现难以达到一致的效果,所以需要进行屏幕适配,针对不同的设备做一个比较统一的方案。先要搞清楚的问题就是什么是屏幕尺寸?什么是屏幕分辨率?什么是屏幕像素密度?还有开发中的各种单位的意义,关于屏幕适配的各种解决方案,布局适配与图片适配,在图片适配方案主要是记述了.9图的使用和制作。

基本概念

什么是屏幕尺寸?屏幕尺寸指屏幕的对角线的长度,单位是英寸,1英寸=2.54厘米,常见尺寸:2.4,2.8,3.5,3.7,4.2,5.0,5.5,6.0等。

什么是屏幕分辨率?屏幕分辨率是指在横纵向上的像素点数,单位是px,1px=1个像素点,一般以纵向像素×横向像素,如:1920×1080。

什么是屏幕像素密度?在尺寸一定的情况下分辨率越高则屏幕越清晰,屏幕像素密度越大!屏幕像素密度是指每英寸上的像素点数,单位是dpi,即”dot per inch”的缩写。屏幕像素密度与屏幕尺寸和屏幕分辨率有关。比如对于两个都是5寸的手机来说,A手机是1280×720的分辨率,B手机是1920×1020的分辨率,那么也就意味着B手机可以显示得更清晰,B手机得像素密度也越大。

常用单位

dpi(屏幕像素密度)

屏幕像素密度是指每英寸上的像素点数,单位是dpi,即”dot per inch“的缩写。上面已经说过了,不再赘述。

px(像素点)

pixel的缩写,像素,1px代表屏幕上一个物理的像素点。上面已经说过了,不再赘述。

dip、dp(密度无关像素)

dip、dp:都是Density Independent Pixels的缩写,即密度无关像素,在像素密度为160dpi的情况下,1dp = 1px,但是在像素密度为320dpi的情况下,1dp = 2px,这就成为了比例关系:

所以,1dp = (手机实际像素密度 / 160dpi)× 1px,换算公式则为:

pxValue = (手机实际像素密度 / 160dpi)× dpValue

dp的范围划分

名称 像素密度范围
mdpi(中密度) 120dpi~160dpi
hdpi(高密度) 160dpi~240dpi
xhdpi(超高密度) 240dpi~320dpi
xxhdpi(超超高密度) 320dpi~480dpi
xxxhdpi(最高密度) 480dpi~640dpi

sp(设置字体大小)

sp:scaled pixels, 与dp类似,用于设置字体大小。

屏幕适配

布局适配

1、禁用绝对布局
2、少用px
3、使用wrap_content、match_parent、layout_weight
4、重建布局文件

图片适配

1、提供不同分辨率的备用位图(美工做的)
2、使用自动拉伸图

自动拉伸图主要是指.9图,它是Android App开发里一种特殊的图片形式,文件的扩展名为:.9.png。.9图片的作用就是在图片拉伸的时候保证其不会失真。所以使用.9图片,让图片在指定的位置拉伸和在指定的位置显示内容,这样图片的边边角角就不会出现失真了。

上面那一部分是原始效果,下面那一部分是使用.9图的效果。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">

<TextView
android:text="@string/tv_content"
android:gravity="center"
android:textSize="30sp"
android:background="@drawable/other"
android:layout_width="match_parent"
android:layout_height="400dp"/>

<TextView
android:text="@string/tv_content"
android:gravity="center"
android:textSize="30sp"
android:background="@drawable/dialog"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

</LinearLayout>

现在有一张图片那么如何制作.9图呢?

选择Create 9-Patch file…选项之后,会弹出选择保存位置的对话框,可以自己选择修改位置,一般都直接选择OK即可,然后打开这个.9图:

所以关于屏幕适配的问题做一下总结:

赏

谢谢你请我喝咖啡

支付宝
微信
  • 本文作者: Tim
  • 本文链接: https://zouchanglin.cn/13324.html
  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 许可协议。转载请注明出处!
  • Android
  • 移动开发

扫一扫,分享到微信

SharedPreference与文件存储
手写一个Hexo评论系统(二)
  1. 1. 基本概念
  2. 2. 常用单位
    1. 2.1. dpi(屏幕像素密度)
    2. 2.2. px(像素点)
    3. 2.3. dip、dp(密度无关像素)
    4. 2.4. sp(设置字体大小)
  3. 3. 屏幕适配
    1. 3.1. 布局适配
    2. 3.2. 图片适配
© 2017-2021 Tim
本站总访问量次 | 本站访客数人
  • 所有文章
  • 工具

tag:

  • 生活
  • Android
  • 索引
  • MySQL
  • 组件通信
  • Nginx
  • JavaSE
  • JUC
  • JavaWeb
  • 模板引擎
  • 前端
  • Linux
  • 计算机网络
  • Docker
  • C/C++
  • JVM
  • 上传下载
  • JavaEE
  • SpringCloud
  • Golang
  • Gradle
  • 网络安全
  • 非对称加密
  • IDEA
  • SpringBoot
  • Jenkins
  • 字符串
  • vim
  • 存储
  • 文件下载
  • Mac
  • Windows
  • NIO
  • RPC
  • 集群
  • 微服务
  • SSH
  • 配置中心
  • XML
  • Chrome
  • 压力测试
  • Git
  • 博客
  • 概率论
  • 排序算法
  • 分布式
  • 异常处理
  • 文件系统
  • 哈希
  • openCV
  • 栈
  • 回溯
  • SpringCore
  • 流媒体
  • rtmp
  • 面向对象
  • Vue
  • ElementUI
  • 软件工程
  • 异步
  • 自定义UI
  • ORM框架
  • 模块化
  • 交互式
  • Jsoup
  • Http Client
  • LRUCache
  • RabbitMQ
  • 消息通信
  • 服务解耦
  • 负载均衡
  • 权限
  • 多线程
  • 单例模式
  • Protobuf
  • 序列化
  • Python
  • m3u8
  • 堆
  • 二叉树
  • 自定义View
  • 观察者模式
  • 设计模式
  • 线程池
  • 动态扩容
  • 高可用
  • GC
  • ffmpeg
  • SpringMVC
  • REST
  • Redis
  • 缓存中间件
  • UML
  • Maven
  • Netty
  • 高性能网络
  • IPC通信
  • IO
  • Stream
  • 发布订阅
  • SQLite
  • Hash
  • 集合框架
  • 链表
  • Lambda
  • 汇编语言
  • 组件化
  • Router
  • 开发工具

    缺失模块。
    1、请确保node版本大于6.2
    2、在博客根目录(注意不是yilia-plus根目录)执行以下命令:
    npm i hexo-generator-json-content --save

    3、在根目录_config.yml里添加配置:

      jsonContent:
        meta: false
        pages: false
        posts:
          title: true
          date: true
          path: true
          text: false
          raw: false
          content: false
          slug: false
          updated: false
          comments: false
          link: false
          permalink: false
          excerpt: false
          categories: false
          tags: true
    

  • 思维导图
  • PDF工具
  • 无损放大
  • 代码转图
  • HTTPS证书