• 如何让一套代码完美适配各种屏幕?


    一、适配的目的

    区别于iOS,android设备有不同的分辨率大小以及不同厂商的系统,目前市场的分辨率可以看下相关统计。

    可以看到主流的分辨率有10多种,当不做适配时,一套代码在不同设备上的效果偏大、偏小、截断以及留白严重,那一套代码如何完美的展示在不同的设备上,可以看下面的一些适配方案。

    二、UI适配

    2.1、常见的适配方式

    2.1.1、xml布局控件适配

    1. 避免写死View的宽高,尽量使用warp_content和match_parent;
    2. 父布局为LinearLayout,选择使用android:layout_weight属性,为布局中的每个子View设置权重;
    3. 父布局为RelativeLayout,可以选择使用layout_centerInParent等属性,设置子View的相对位置;
    4. 谷歌官方在之前版本中提供了一个百分比布局方式:support:percent,它支持RelativeLayout和FrameLayout的百分比布局,但是目前官方已经不再维护,而将他取而代之的是新晋布局:ConstraintLayout,ConstraintLayout强大之处不仅在于它能够进行百分比布局,还可以进行相对定位、角度定位、尺寸约束、宽高比、Chainl链布局、住院病历等,在不同设备间都能处理的游刃有余。

    2.1.2、图片适配

    1. .9图
      .9.png图片本质上还是png图片,相对于普通png图来说,.9图可以让图片在指定的位置拉伸和在指定的位置显示内容且不会失真;
    2. 见2.1.4分辨率限定符;

    2.1.3、依据产品设计适配

    所谓产品设计适配,指的是产品流程在不同设备上有不同的展示方式,例如手机与Pad的区别,在手机设备上,一般来说具体Item列表是一个页面,点击每个Item会跳转至新的详情页;而在宽度>高度的Pad上,为了防止页面空白浪费,一般会要求屏幕左侧为Item列表,右侧即详情页,item与详情页会同时出现在用户的视觉内,如下图

    关于这种类型的设计,其实郭霖《第一行代码》给出了一个方案,我在这里抛砖引玉一下,给出基本思路。

    这种情况下,适配的核心在于利用android动态加载布局的机制,使得程序能够根据分辨率或者屏幕大小在运行时动态加载不同的布局,而动态加载就需要使用到限定符

    • 限定符 所谓限定符,指的是给res目录中的子目录加上“-限定符”,可以给不同设备提供不同的资源以及布局,如下图
  • 相关阅读:
    Docker三剑客之docker-swarm
    蓝牙耳机哪款音质最好?公认音质好的蓝牙耳机品牌
    Vue3 —— 常用 Composition API(一)(computed函数、watch函数、watchEffect函数、生命周期钩子)
    零售业迎来全新发展,这个技术少不了
    二分图匹配(匈牙利算法 DFS 实现)
    语法练习:sleep_in
    在ESP32上使用Arduino(Arduino as an ESP-IDF component)
    static详解
    LangChain与WebSocket:实时通信的新纪元
    CSS花边001:无衬线字体和有衬线字体
  • 原文地址:https://blog.csdn.net/dageliuqing/article/details/127093871