Android icon图标、splash启动页常用尺寸

本文内容为转载,侵权留言删除。

引言

在出发之前,预备好android常用图标、图片的尺寸以及它们存放的位置吧!


正文

icon图标尺寸:

  • drawable-hdpi-icon 72*72
  • drawable-ldpi-icon 36*36
  • drawable-mdpi-icon 48*48
  • drawable-xhdpi-icon 96*96
  • drawable-xxhdpi-icon 144*144
  • drawable-xxxhdpi-icon 192*192

启动页:

横屏 高×宽

  • drawable-land-hdpi-screen 480*800
  • drawable-land-ldpi-screen 200*320
  • drawable-land-mdpi-screen 320*480
  • drawable-land-xhdpi-screen 720*1280
  • drawable-land-xxhdpi-screen 960*1600
  • drawable-land-xxxhdpi-screen 1280*1920

竖屏 高×宽

  • drawable-port-hdpi-screen 800*480
  • drawable-port-ldpi-screen 320*200
  • drawable-port-mdpi-screen 480*320
  • drawable-port-xhdpi-screen 1280*720
  • drawable-port-xxhdpi-screen 1600*960
  • drawable-port-xxxhdpi-screen 1920*1280

bitmap存放位置的问题

Google官方有介绍:Managing Projects Overview

drawable/For bitmap files (PNG, JPEG, or GIF), 9-Patch image files, and XML files that describe Drawable shapes or Drawable objects that contain multiple states (normal, pressed, or focused). See the Drawable resource type.

mipmap/For app launcher icons. The Android system retains the resources in this folder (and density-specific folders such as mipmap-xxxhdpi) regardless of the screen resolution of the device where your app is installed. This behavior allows launcher apps to pick the best resolution icon for your app to display on the home screen. For more information about using the mipmap folders, see Managing Launcher Icons as mipmap Resources.

图标放mipmap,其他放drawable

mipmap下面只是用来放icon的。而.png 、.9.png、.jpg、.gif 的图片资源是放到drawable文件夹下的。图片一般是png格式的。

构建APK时,根据目标屏幕的分辨率大小,AAPT会从drawable中去掉不需要的其他分辨率图片资源,而mipmap中的图片资源则会保留在APK中。在“所需分辨率与目标分辨率不同”的情况下,最典型的例子是Android启动器,它会在桌面显示更大更清晰的图标,所以不会使用当前分辨率的图标资源,而是向上取更高分辨率的一个资源。如对于XXHDPI的Nexus5,它的启动器会拉取XXXHDPI的启动器图标。所以需要在mipmap中保留其他分辨率的图标资源。

注:aapt即AndroidAssetPackagingTool,在SDK的build-tools目录下。该工具可以查看,创建,更新ZIP格式的文档附件(zip,jar,apk)。也可将资源文件编译成二进制文件,尽管你可能没有直接使用过aapt工具,但是buildscripts和IDE插件会使用这个工具打包apk文件构成一个Android应用程序。在使用aapt之前需要在环境变量里面配置SDK-tools路径,或者是路径+aapt的方式进入aapt。

Android 自适应 多屏幕支持

1. 屏幕相关概念

1.1分辨率
分辨率是指屏幕上有横竖各有多少个像素

1.2屏幕尺寸
屏幕尺寸指的是手机实际的物理尺寸,比如常用的2.8英寸,3.2英寸,3.5英寸,3.7英寸 .4.65英寸,5.0英寸,5.5英寸。
Android将屏幕大小分为四个级别(small,normal,large,and extra large)。

1.3屏幕密度
每英寸像素数
手机可以有相同的分辨率,但屏幕尺寸可以不相同,
Diagonal pixel表示对角线的像素值(=),DPI=933/3.7=252
Android将实际的屏幕密度分为四个通用尺寸(low,medium,high,and extra high)
一般情况下的普通屏幕:ldpi是120dpi,mdpi是160dpi,hdpi是240dpi,xhdpi是320dpi

对于屏幕来说,dpi越大,屏幕的精细度越高,屏幕看起来就越清楚

1.4密度无关的像素
dip是一种虚拟的像素单位,dip 全称是Density-independent pixel 翻译过来就是:像素无关密度。他的大小就是一个1个dpi 有160个像素的屏幕大小
dip和具体像素值的对应公式是
dip = 160px/dpi
px = dip*dpi/160

当你定义应用的布局的UI时应该使用dp单位,确保UI在不同的屏幕上正确显示。

试想现在有2个屏幕,屏幕的大小都是1寸,A屏幕密度为160,B屏幕密度为320。要去显示一个为宽度为80按钮button。如果用px为单位,A屏幕上button占屏幕的一半0.5寸,B屏幕上button占屏幕的四分之一 0.25寸,小了一半。如果用dip 为单位 80dip
A屏幕上的大小是:80160/160=80px,
B屏幕上的大小 : 80
320/160 = 160px 。
由于B的密度是A的2倍,现在B屏幕上button的大小自动增加了一倍,这样在A和B屏幕上button可以显示相同的大小了。使用dip这个单位也就达到了适配的目的,顺便说一句dip原本是dip,为了和sp这个单位统一,改名成了dp。

2. Android多屏幕支持机制

Android的支持多屏幕机制即:为当前设备屏幕提供一种合适的方式来共同管理并解析应用资源。

Android平台中支持一系列你所提供的指定大小(size-specific),指定密度(density-specific)的合适资源。

指定大小(size-specific)的合适资源是指small, normal, large, and xlarge。

指定密度(density-specific)的合适资源,是指ldpi (low), mdpi (medium), hdpi (high), and xhdpi (extra high).

Android有个自动匹配机制去选择对应的布局和图片资源

1)界面布局方面

根据物理尺寸的大小准备5套布局:

layout(放一些通用布局xml文件,比如界面顶部和底部的布局,不会随着屏幕大小变化,类似windows窗口的title bar),

layout-small(屏幕尺寸小于3英寸左右的布局),

layout-normal(屏幕尺寸小于4.5英寸左右),

layout-large(4英寸-7英寸之间),

layout-xlarge(7-10英寸之间)

2)图片资源方面

需要根据dpi值准备5套图片资源:

drawable:主要放置xml配置文件或者对分辨率要求较低的图片

drawalbe-ldpi:低分辨率的图片,如QVGA (240x320)

drawable-mdpi:中等分辨率的图片,如HVGA (320x480)

drawable-hdpi:高分辨率的图片,如WVGA (480x800),FWVGA (480x854)

drawable-xhdpi:至少960dp x 720dp

Android有个自动匹配机制去选择对应的布局和图片资源。

系统会根据机器的分辨率分别到这几个文件夹里面去找对应的图片。

在开发程序时为了兼容不同平台不同屏幕,建议各自文件夹根据需求均存放不同版本图片。

3. AndroidManifest.xml 配置

android从1.6和更高,Google为了方便开发者对于各种分辨率机型的移植而增加了自动适配的功能

android:largeScreens="true"

android:normalScreens="true"

android:smallScreens="true"

android:anyDensity="true"/>

4. Android提供3种方式处理屏幕自适应

4.1预缩放的资源(基于尺寸和密度去寻找图片)

1)如果找到相应的尺寸和密度,则利用这些图片进行无缩放显示。

2)如果没法找到相应的尺寸,而找到密度,则认为该图片尺寸为 "medium",利用缩放显示这个图片。

3)如果都无法匹配,则使用默认图片进行缩放显示。默认图片默认标配 "medium" (160)。

5. Android系统自动适配技巧

Android系统采用下面两种方法来实现应用的自动适配:

1)布局文件中定义长度的时候,最好使用wrap_content,fill_parent, 或者dp 进行描述,这样可以保证在屏幕上面展示的时候有合适的大小

2)为不同屏幕密度的手机,提供不同的位图资源,可以使得界面清晰无缩放。

对应bitmap 资源来说,自动的缩放有时会造成放大缩小后的图像变得模糊不清,这时就需要应用为不同屏幕密度配置提供不同的资源:为高密度的屏幕提供高清晰度的图像等。

3)不要使用AbsoluteLayout

4)像素单位都使用DIP,文本单位使用SP

6. 在代码中获取屏幕像素、屏幕密度

获取屏幕分辨率有2种方法:

方法一 :

Display mDisplay = getWindowManager().getDefaultDisplay();
int W = mDisplay.getWidth();
int H = mDisplay.getHeight();

这里的w,h 就是屏幕的宽高分辨率

方法二 :

DisplayMetrics mDisplayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(mDisplayMetrics);
int W = mDisplayMetrics.widthPixels;
int H = mDisplayMetrics.heightPixels;

同样这里的w,h 就是屏幕的宽高分辨率
既然我们已经学习了dpi当然也要知道怎么去获取也很简单

DisplayMetrics dm = new DisplayMetrics();
dm = getResources().getDisplayMetrics();
int dpi = dm.densityDpi;

dpi就是屏幕密度了。下面用一个简单的例子总结

public class MainActivity extends Activity {

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        DisplayMetrics dm = new DisplayMetrics();
        dm = getResources().getDisplayMetrics();
        int dpi = dm.densityDpi;
        int widthPx = dm.widthPixels;
        int heightPx = dm.heightPixels;
        Log.d("MainActivity", "dpi : "+dpi);
        Log.d("MainActivity", "widthPx : "+widthPx);
        Log.d("MainActivity", "heightPx : "+heightPx);
        }
    }

7. 一般多分辨率处理方法及其缺点

7.1 图片缩放

基于当前屏幕的精度,平台自动加载任何未经缩放的限定尺寸和精度的图片。如果图片不匹配,平台会加载默认资源并且在放大或者缩小之后可以满足当前界面的显示要求。例如,当前为高精度屏幕,平台会加载高精度资源(如HelloAndroid中drawable-hdpi 中的位图资源),如果没有,平台会将中精度资源缩放至高精度,导致图片显示不清晰。

7.2 兼容更大尺寸的屏幕

当前屏幕超过程序所支持屏幕的上限时,定义supportsscreens元素,这样超出显示的基准线时,平台在此显示黑色的背景图。例如,WVGA 中精度屏幕上,如程序不支持这样的大屏幕,系统会谎称是一个320×480 的,多余的显示区域会被填充成黑色。

7.4 采用OpenGL 动态绘制图片

Android 底层提供了OpenGL 的接口和方法,可以动态绘制图片,但是这种方式对不熟悉计算机图形学的开发者来讲是一个很大的挑战。一般开发游戏,采用OpenGL 方式。

7.5 多个apk 文件

Symbian 和传统的J2ME 就是采用这种方式,为一款应用提供多个分辨率版本,用户根据自己的需求下载安装相应的可执行文件。针对每一种屏幕单独开发应用程序不失为一种好方法,但是目前Google Market 对一个应用程序多个分辨率版本的支持还不完善,开发者还是需要尽可能使用一个apk 文件适应多个分辨率。

根据drawable文件夹的修饰符进行选择的。

比如drawable、drawable-ldpi、drawable-mdpi、drawable-hdpi、drawable-xhdpi、drawalbe-xxhdpi、drawable-xxxhdpi

根据修饰符进行优先匹配。

不同的dpi修饰符对应的dpi如下

drawable-ldpi 120DPI

drawable-mdpi 160DPI

drawable-hdpi 240DPI

drawable-xhdpi 320DPI

drawalbe-xxhdpi 480DPI

drawable-xxxhdpi 640DPI

比如三星手机I9260分辨率是1280*720,屏幕大小是4.65英寸,那么计算得到的PPI就是315.8PPI

找一个最近的DPI值应该是320DPI,也就是这个设备被归一化后就是320DPI。属于xhdpi。

系统取图片时会优先选择drawable-xhdpi里面的图片,如果drawable-xhdpi不存在或者没有这张图,就会就近从其它分辨率和默认的无后缀drawable文件夹下取。

比如工程只有在draw-xxhdpi文件下有img图片,而你的设置是xhdpi,就会从xxhdpi取完图片再压缩到对应大小返回给使用者。



作者:OzanShareing
链接:https://www.jianshu.com/p/8672bb3f98e9
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

### UniApp 设置图标启动页并打包 APK 的流程 #### 配置应用图标 在 `manifest.json` 文件中配置应用程序的相关资源路径,包括不同尺寸的应用图标: ```json { "mp-weixin": { ... }, "h5": {}, "app-plus": { "distribute": { "ios": {}, "android": {} }, "icon": { "normal": "./static/icon.png" } } } ``` 此操作会指定应用图标的路径为项目中的 `./static/icon.png`[^1]。 #### 定义启动页图片 同样,在 `manifest.json` 中定义启动页的配置项来设定启动页面使用的背景图像: ```json { "app-plus": { ... "splashscreen": { "src": "./static/splash.png", "duration": 0, "autoclose": true } } } ``` 这里设置了启动画面使用位于项目的 `./static/splash.png` 图像作为显示内容,并立即将其关闭而不展示任何加载动画[^2]。 #### 取消默认加载效果 对于希望移除启动期间可能出现的标准加载指示器(比如雪花或旋转图标),可以通过调整上述 JSON 片段内的参数实现。具体来说就是将 `duration` 设定为零秒以及开启自动关闭功能(`autoclose`),从而避免不必要的延迟和视觉干扰。 #### 创建 Android APK 文件 完成以上设置之后,可以利用命令行工具来进行最终构建过程。确保已经安装好必要的环境依赖如 Node.js 和 HBuilderX IDE 或者 CLI 工具链。接着执行如下指令以生成适用于 Android 平台分发的目标文件: ```bash # 使用HBuilderX内置编译选项发布APK npm run build:app-release # 或者通过CLI方式手动触发构建任务 npx hbuildx compile --platform=android --type=release ``` 这将会把打包好的 `.apk` 放置于指定目录下供后续部署使用[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值