Android屏幕自适应1

简介: Android屏幕自适应

Android屏幕适配出现的原因

为什么Android需要进行屏幕适配?

由于Android系统的开放性,任何用户、开发者、OEM厂商、运营商都可以对Android进行定制,修改成他们想要的样子,但是这种“碎片化”到底到达什么程度呢?


统计数据表明:

2012年,支持Android的设备共有3997种;

2013年,支持Android的设备共有11868种;

2014年,支持Android的设备共有18796种;

2015年,支持Android的设备共有24093种;


试想一下这么一个场景:

为5.5寸屏幕准备的UI设计图,运行在6.6寸的屏幕上,很可能在右侧和下侧存在大量的空白;

而6.6寸的UI设计图运行到5.5寸的设备上,很可能显示不下。


屏幕种类这么多,那么就需要一套完美的方案去解决适配问题,介绍屏幕适配方案之前,下面先简单介绍下Android屏幕中用到的一些相关概念

屏幕基本概念

屏幕尺寸

屏幕尺寸即手机屏幕对角线的物理尺寸,以英寸为单位,1英寸=2.54厘米;

现常见的屏幕尺寸:5.5、6.0、6.1、6.5、6.6、6.67、6.7英寸等等

屏幕分辨率和像素

屏幕分辨率就是手机屏幕的像素点数,指屏幕横竖各有多少个像素,一般描述成屏幕的“高×宽”,如下方所示屏幕分辨率就是所谓的 1080x2400 ;


屏幕像素即 1080x2400=2592000,分辨率为 1080x2400 的手机约有260w个像素;

现Android手机比较常见的分辨率为:1080x1920、1080x2400、1440x3200;


adb命令查看手机屏幕分辨率:adb shell wm size

sp

sp:根据文字大小首选项进行放缩,主要用于字体显示;谷歌开发指导中推荐使用12sp以上的字体,否则用户将无法看清。设置字体大小时不要使用奇数或小数,可能会造成精度丢失;

px

px:像素点,构成图像的最小单位

dp 密度无关像素

dp:安卓中的相对大小,dp就是为了使得开发者设置的长度能够根据不同屏幕的分辨率获得不同的像素(px)数量;

换算公式是 1dp=(dpi/160)x 1px;(例:在密度为160dpi的屏幕上,1px就是1dp。依次类推,在320dpi的屏幕上,1dp就是2px。屏幕密度越大,1个dp对应的px也就越大);

dpi

dpi:指每英寸的像素点数,用于描述屏幕的显示特性,dpi越大,屏幕的精细度越高,屏幕看起来就越清晰;


adb命令查看手机屏幕密度:adb shell wm density

密度类型 分辨率 dpi dp换算

低密度(ldpi) 240x320 120 1dp=0.75px

中密度(mdpi) 320x480 160 1dp=1px

高密度(hdpi) 480x800 240 1dp=1.5px

超高密度(xhdpi) 720x1280 320 1dp=2px

超超高密度(xxhdpi) 1080x1920 480 1dp= 3px


Density

Density:表示设备屏幕密度的值,它表示每英寸在屏幕上显示的像素数量,density和dpi的关系为 density = dpi/160;

屏幕方向

横屏竖屏自动切换

在res目录下建立 layout 和 layout-land 两个目录,里面分别放置竖屏和横屏两种布局文件,以适应对横屏竖屏自动切换;

禁用自动切换屏幕方向

// 限制此页面横屏显示
Android:screenOrientation="landscape"

// 限制此页面竖屏显示
Android:screenOrientation="portrait"

Android屏幕自适应

1. dp原生方案

Android尺寸的基本单位,Android自带的原始的适配方案, 在不同的分辨率手机里面表现出相应大小的像素点。 在不同的分辨率的手机里面1dp对应着不同的px, 这样就实现了dp定义一个控件大小的时候,在不同分辨率手机里表现出相应大小的像素值;

2. 线形布局权重

(layout_weight属性值越小 对应的优先级越高)

在 values 文件夹下的 styles 文件中新建一个 style 属性标签;

布局文件中有需要引用即可(省去标签中的 android:layout_height=“0px” 属性);

示例代码

styles.xml 文件

<!<!--styles.xml-->
<?xml version="1.0" encoding="utf-8"?>
<resources>  
 
<!-- 全屏幕拉伸-->
  <style name="layout_full">  
    <item name="android:layout_width">match_parent</item>  
    <item name="android:layout_height">match_parent</item>  
  </style>
   
<!-- 固定自身大小-->
  <style name="layout_wrap">  
    <item name="android:layout_width">wrap_content</item>  
    <item name="android:layout_height">wrap_content</item>  
  </style>
 
<!-- 横向分布-->
  <style name="layout_horizontal" parent="layout_full">  
    <item name="android:layout_width">0px</item>  
  </style> 
    
<!-- 纵向分布-->
  <style name="layout_vertical" parent="layout_full">  
    <item name="android:layout_height">0px</item>  
  </style> 
  
</resources>  

activity_main.xml 文件

<!--activity_main.xml-->
<LinearLayout 
  style="@style/layout_vertical"
  android:layout_weight="2"
  android:orientation="vertical">
  
  <View
    style="@style/layout_vertical"
    android:background="#ffffff"
    android:layout_weight="2"/>    
  
  <View
    style="@style/layout_vertical"
    android:background="#000000"
    android:layout_weight="6"/>
  
  <View
    style="@style/layout_vertical"
    android:background="#ff0000"
    android:layout_weight="9"/>
  
  <View
    style="@style/layout_vertical"
    android:background="#00ffff"
    android:layout_weight="1"/>
 
</LinearLayout>

Android屏幕自适应2:https://developer.aliyun.com/article/1473629

目录
相关文章
|
7月前
|
编解码 Java Android开发
Android屏幕自适应2
Android屏幕自适应
60 0
|
Java API Android开发
Android 最新实现沉浸式状态栏的效果
Android 最新实现沉浸式状态栏的效果
230 0
|
7月前
|
编解码 Android开发
Android 屏幕适配
Android 屏幕适配
79 4
|
7月前
|
Android开发
android毛玻璃效果
android毛玻璃效果
146 0
|
XML Java API
Android 沉浸式状态栏必知必会
Android 沉浸式状态栏追根究底
802 0
|
XML 编解码 API
浅谈 Android 屏幕适配
几组概念 分辨率 屏幕上物理像素的总数。添加对多种屏幕的支持时, 应用不会直接使用分辨率;而只应关注通用尺寸和密度组指定的屏幕尺寸及密度。
323 0
浅谈 Android 屏幕适配
|
Java Android开发 前端开发
|
前端开发 Android开发
|
Android开发 C++ 前端开发