赞
踩
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(可以随意命名)
<?xml version="1.0" encoding="utf-8"?>
<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文件配置显示如下:
<?xml version="1.0" encoding="utf-8"?> <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放在最前。如下图
<?xml version="1.0" encoding="utf-8"?> <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> <!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style> <style name="LaunchTheme" parent="Theme.AppCompat.NoActionBar"> <item name="android:windowNoTitle">true</item> <item name="android:windowFullscreen">true</item> <item name="android:navigationBarColor">@android:color/transparent</item> <item name="android:statusBarColor">@android:color/transparent</item> <item name="android:windowIsTranslucent">true</item> <item name="android:windowBackground">@android:color/background_dark</item> </style> </resources>
style.xml文件主要配置隐藏:navigationBar和全屏显示,以及android:windowIsTranslucent进行隐藏黑屏等问题。
Android的icon和启动页的配置并不复杂,主要是需要理解Android在UI适配过程中,图片资源读取的底层原理。
持续更新中……
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。