Android开发App过程中,需要一个独特吸引眼球的应用icon,以及标新的Launch页面用于简明的介绍。为了适配各种 手机的尺寸和手机屏幕分辩率,需要同一张图片制作多种尺寸用于兼容各种不同分辨率的设备。
DPI(Dots Per Inch,每英寸点数)是一个量度单位。
Android系统为了简化开发者为多种屏幕设计用户界面,Android将实际屏幕尺寸和范围作了通用的规定,是以DPI的范围进行定义的六种通用密度(ldpi、mdpi、hdpi、xhdpi、xxhdpi、xxxhdpi)。Android通用密度是以mdpi(中)为基线配置的,此基线基于第一代Android设备(T-Mobile G1 160dpi)的屏幕配置。以mdpi为基线,各密度范围的放大倍数(即缩放因子density)Scale = 设备所在密度范围中最大dpi值 / mdpi(基线 160dpi) 如下图:
密度 | dpi范围 | 放大倍数 |
---|---|---|
ldpi(低) | ~120dpi | 0.75 |
mdpi(中) | ~160dpi (基线) | 1.0(基线) |
hdpi(高) | ~240dpi | 1.5 |
xhdpi(低) | ~320dpi | 2.0 |
xxhdpi(低) | ~480dpi | 3.0 |
xxxhdpi(低) | ~640dpi | 4.0 |
Android项目的资源文件会创建针对不同设备的资源文件的文件夹:
其中:
资源文件夹下mipmap和drawable文件是存放图片文件
icon图片存储文件夹:
mipmap-mdpi(中度密度)
mipmap-hdpi(高密度)
mipmap-xhdpi(超高密度)
mipmap-xxhdpi(超超高密度)
mipmap-xxxhdpi(超超超高密度)
mipmap-anydpi-v26
启动页面或图片:
drawable
drawable-v24
注意:
drawable-v24 代表Android7.0以上版本设备的资源文件存放文件夹
mipmap-anydpi-v26代表Android8.0以上版本的资源文件存放文件夹
Android中图片适配的流程如下:
可以参考:Android开发系列6——项目中res详解
根据Android UI适配图片文件查找的方式,把项目中的目录drawable-v24、mipmap-anydpi-v26删除,并且创建如下图所示的文件目录,随后会讲解App的icon和启动页图片。
icon的文件配置在资源目录下的mipmap文件夹下(res–>mipmap),其中:icon分别存放在mipmap为前缀的文件夹中,每个文件夹下icon的尺寸大小不同,下边会详细说明每个问价下文件的尺寸。
文件夹
文件夹和尺寸对应表格
图标文件夹 | 尺寸(px) | 系统密度(dpi) |
---|---|---|
res/drawable-ldpi (可以不用这个文件) | 36 * 36 | ~120 |
res/drawable-mdpi | 48 * 48 | ~160 |
res/drawable-hdpi | 72 * 72 | ~240 |
res/drawable-xhdpi | 96 * 96 | ~320 |
res/drawable-xxhdpi | 144 * 144 | ~480 |
res/drawable-xxxhdpi | 192 * 192 | ~640 |
Android的应用图标icon 配置在AndroidManifest.xml文件中,配置android:icon和android:roundIcon(可省略)对应mipmap文件下icon图片文件名字ic_launcher_app(可以随意命名)
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.ftimage.firstandroid">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher_app"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_app"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".LauchActivity">activity>
配置成功之后,就可以测试使用。
Android上的启动页和IOS启动页是有区别的,在IOS中,启动页只需要切图不同尺寸的图片,配置到项目中就可以支持不同的设备。而Android的启动页需要单独创建一个LaunchActivity来呈现启动页。
启动页上图片和项目中的图片都是存储在drawable文件夹中,为了减轻UI切图压力和App资源包大小,一般情况下都只保留drawable-xhdpi、drawable-xxhdpi两种图片尺寸(IOS中的@2x、@3x图)。所以需要的切图的启动页尺寸:
启动页图片文件夹 | 图片尺寸(px) |
---|---|
res/drawable-xhdpi | 720 × 1280 |
res/drawable-xxhdpi | 1080 × 1920 |
创建一个用于启动页面的Activity,App启动展示启动页LaunchActivity之后就,跳转到App的主页。所以LaunchActivity需要如下操作
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
public class LaunchActivity extends AppCompatActivity {
private final int splash_display_length = 1000;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_lauch);
new android.os.Handler().postDelayed(new Runnable() {
@Override
public void run() {
Intent mainIntent = new Intent(LaunchActivity.this, MainActivity.class);
LaunchActivity.this.startActivity(mainIntent);
LaunchActivity.this.finish();
}
},splash_display_length);
}
}
LaunchActivity启动页的xml文件配置显示如下:
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".LaunchActivity"
>
<ImageView
android:id="@+id/imageViewL"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:adjustViewBounds="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/ic_launcher_bg"
>
ImageView>
androidx.constraintlayout.widget.ConstraintLayout>
其中启动图片是:ic_launcher_bg,图片切割类型android:scaleType=“centerCrop”。
需要把LaunchActivity的Activity配置如下,并且需要把LaunchActivity放在最前。如下图
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.ftimage.firstandroid">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher_app"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".LaunchActivity" android:theme="@style/LaunchTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
intent-filter>
activity>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
intent-filter>
activity>
注意:LaunchActivity需要在style.xml中配置LauchTheme主题。(如果不配置,启动只有会出现navigationBar和黑屏现象)
<resources>
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
- "colorPrimary"
>@color/colorPrimary
- "colorPrimaryDark">@color/colorPrimaryDark
- "colorAccent">@color/colorAccent
style>
<style name="LaunchTheme" parent="Theme.AppCompat.NoActionBar">
- "android:windowNoTitle"
>true
- "android:windowFullscreen">true
- "android:navigationBarColor">@android:color/transparent
- "android:statusBarColor">@android:color/transparent
- "android:windowIsTranslucent">true
- "android:windowBackground">@android:color/background_dark
style>
resources>
style.xml文件主要配置隐藏:navigationBar和全屏显示,以及android:windowIsTranslucent进行隐藏黑屏等问题。
Android的icon和启动页的配置并不复杂,主要是需要理解Android在UI适配过程中,图片资源读取的底层原理。
持续更新中……