Android的初始屏幕图像大小,以适应所有设备

我有一个全屏幕PNG我想显示在飞溅。 这里只有一个错误,我不知道每个可绘制文件夹( ldpimdpihdpixhdpi )放入的大小。 我的应用程序应该在所有手机和平板电脑上运行良好。 我应该创build什么样的大小(以像素为单位),以便在所有屏幕上显示效果?

放弃

这个答案是从2013年开始的,已经严重过时了。 从Android 3.2开始,现在有6组屏幕密度。 这个答案会尽快更新,但没有ETA。 目前所有密度请参考官方文档 (尽pipe关于特定像素尺寸的信息一直很难find)。

这是tl / dr版本

  • 创build4个图像,每个屏幕密度一个:

    • xlarge(xhdpi):640×960
    • 大(hdpi):480×800
    • 中等(mdpi):320×480
    • 小(ldpi):240×320
  • 阅读Android开发者指南中的9-patch图片介绍

  • devise具有可以安全拉伸的区域而不会影响最终结果的图像

有了这个,Android会为设备的图像密度select合适的文件,然后按照9贴片标准来拉伸图像。

tl结束 完整的post提前

我正在回答这个问题的devise相关方面。 我不是开发人员,所以我将无法提供实施许多解决scheme的代码。 唉,我的意图是帮助devise师,当我帮助开发我的第一个Android应用程序时,就像我一样迷失。

适合所有尺寸

使用Android,公司可以开发几乎任何尺寸的手机和桌面,几乎可以根据他们想要的任何分辨率进行开发。 正因为如此,没有固定的屏幕分辨率,所以对于启animation面没有“正确的图像大小”。 这对于想要实现启animation面的人员来说是一个问题。

你的用户真的想看到一个启animation面吗?

(在一个侧面说明中,可用性人员之间的启动屏幕有点令人沮丧,有人认为用户已经知道他点击了什么应用程序,并且用启动屏幕来标记图像并不是必要的,因为它只会打断用户体验一个“广告”,然而,它应该被用于需要一些相当大的负载,当初始化(5s +),包括游戏等应用程序,以便用户不会卡住想知道应用程序崩溃或不)

屏幕密度; 4class

所以,鉴于市场上手机中有这么多不同的屏幕分辨率,谷歌实施了一些替代品和漂亮的解决scheme,可以帮助。 首先你必须知道的是,Android将所有屏幕分为4个不同的屏幕密度:

  1. 低密度(ldpi〜120dpi)
  2. 中等密度(mdpi〜160dpi)
  3. 高密度(hdpi〜240dpi)
  4. 超高密度(xhdpi〜320dpi)(这些dpi值是近似值,因为定制的设备将具有不同的dpi值)

你(如果你是devise师)需要知道的是,Android基本上从4个图像中select显示,取决于设备。 所以你基本上必须devise4个不同的图像(尽pipe可以开发更多的不同的格式,如宽屏,纵向/横向模式等)。

考虑到这一点,除非您为Android中使用的每个分辨率devise一个屏幕,否则您的图像将延伸至适合屏幕尺寸。 除非你的图像基本上是一个渐变或模糊,你会得到一些不必要的失真与拉伸。 所以你基本上有两个select:为每个屏幕大小/密度组合创build一个图像,或者创build四个9补丁图像。

最难的解决scheme是为每个分辨率devise一个不同的启animation面。 您可以从本页末尾的表格中select分辨率开始(例如:960 x 720没有列出)。 假设图像中有一些小的细节,例如小文本,则必须为每个分辨率devise多个屏幕。 例如,中画面中显示的480×800图像可能看起来不错,但是在更小的屏幕上(更高的密度/ dpi),徽标可能会变得太小,或者某些文本可能变得不可读。

9补丁图像

另一种解决scheme是创build一个9补丁的图像 。 它基本上是围绕图像的1像素透明边框,通过在此边框的顶部和左侧区域中绘制黑色像素,您可以定义图像的哪些部分可以被拉伸。 我不会详细讨论9贴片图像的工作原理,但总之,与顶部和左侧区域中的标记alignment的像素是将被重复以拉伸图像的像素。

一些基本规则

  1. 您可以在photoshop中制作这些图像(或者任何可以准确创build透明png的图像编辑软件)。
  2. 1像素边框必须是完全透明的。
  3. 1像素透明边框必须围绕您的图像,而不仅仅是顶部和左侧。
  4. 您只能在该区域绘制黑色(#000000)像素。
  5. 顶部和左边界(定义图像拉伸)只能有一个点(1px x 1px),两个点(都是1px x 1px)或一个连续线(宽x 1px或1px x高)。
  6. 如果select使用2个点,图像将按比例扩展(所以每个点将轮stream扩展,直到达到最终的宽度/高度)
  7. 除了预期的基本文件尺寸外,1px边框还必须添加。 所以一个100×100 9-补丁图像实际上有102×102(上,下,左,右100×100 + 1px)
  8. 9贴片图像必须以* .9.png结尾

因此,您可以在徽标的任一侧(顶部边框)放置1个点,在其上下两个点(左边框)上放置1个点,这些标记的行和列将是唯一要拉伸的像素。

这是一个9幅图像,102×102像素(100×100最终尺寸,用于应用程序):

9-patch图像,102x102px

这是相同图像的200%缩放:

为了清晰起见,相同的图像放大2倍

注意顶部和左侧的1px标记表示哪些行/列将展开。

以下是这个图片在应用程序内100×100的样子:

呈现为100x100

如果扩展到460×140,这是什么意思:

呈现为460x140

最后要考虑的一件事。 这些图像可能在您的显示器屏幕和大多数手机上看起来很好,但是如果设备具有非常高的图像密度(dpi),则图像看起来会太小。 可能仍然是清晰的,但在1920×1200分辨率的平板电脑上,图像看起来像是一个非常小的正方形。 那么解决scheme是什么? devise4个不同的9贴片发射器图像,每个图像密度不同。 为确保不会收缩,您应该为每个密度类别devise最低的通用分辨率。 在这里收缩是不可取的,因为9-patch只能解释伸缩,所以在缩小的过程中,小的文本和其他元素可能会失去可读性。

以下列出了每种密度类别的最小,最常见的分辨率:

  • xlarge(xhdpi):640×960
  • 大(hdpi):480×800
  • 中等(mdpi):320×480
  • 小(ldpi):240×320

因此,在上述分辨率中devise四个闪屏,展开图像,在canvas周围放置一个1px的透明边框,并标记哪些行/列是可拉伸的。 请记住,这些图像将用于密度类别中的任何设备,因此您的ldpi图像(240 x 320)可能会在具有小图像密度(〜120 dpi)的超大型平板电脑上被拉伸至1024 x 600。 因此,9贴片是拉伸的最佳解决scheme,只要您不需要照片或复杂的graphics作为启animation面(在创builddevise时请记住这些限制)。

再一次,这种拉伸不发生的唯一方法是devise一个屏幕的每个分辨率(或每个分辨率 – 密度组合,如果你想避免图像变得太大/高/低密度设备大),或告诉图像不会伸展,并且会出现背景颜色(也请记住,由于颜色configuration文件,Android引擎渲染的特定颜色可能与由photoshop渲染的特定颜色不同)。

我希望这是有道理的。 祝你好运!

肖像模式

MDPI是320×480 dp = 320×480像素(1x)

LDPI是0.75 x MDPI = 240x360px

HDPI是1.5 x MDPI = 480x720px

XHDPI是2 x MDPI = 640x960px

XXHDPI是3 x MDPI = 960x1440px

XXXHDPI是4 x MDPI = 1280x1920px

景观模式

MDPI是480×320 dp = 480×320像素(1x)

LDPI是0.75 x MDPI = 360x240px

HDPI是1.5 x MDPI = 720x480px

XHDPI是2 x MDPI = 960x640px

XXHDPI是3 x MDPI = 1440x960px

XXXHDPI是4 x MDPI = 1920x1280px

肖像

LDPI:200x320px

MDPI:320x480px

HDPI:480x800px

XHDPI:720px1280px

景观

LDPI:320x200px

MDPI:480x320px

HDPI:800x480px

XHDPI:1280x720px

我已经search了最好的和最简单的答案,使9贴片图像。 现在要使9补丁映像是最简单的任务。

https://romannurik.github.io/AndroidAssetStudio/index.html你可以在所有的分辨率 – XHDPI,HDPI,MDPI,LDPI只需点击一个9补丁图像。

使用PNG不是一个好主意。 事实上,就performance而言,这是昂贵的。 你可以使用可绘制的XML文件,例如Facebook的背景 。

这将帮助您平滑和加速您的performance,并为徽标使用.9补丁图像。

 Density buckets LDPI 120dpi .75x MDPI 160dpi 1x HDPI 240dpi 1.5x XHDPI 320dpi 2x XXHDPI 480dpi 3x XXXHDPI 640dpi 4x px / dp = dpi / 160 dpi 

在我的例子中,我使用了style.xml中的可绘制列表。 随着图层列表可绘,你只需要一个PNG的所有屏幕大小。

 <resources xmlns:tools="http://schemas.android.com/tools"> <!-- Base application theme. --> <style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar"> <item name="android:windowNoTitle">true</item> <item name="android:windowBackground">@drawable/flash_screen</item> <item name="android:windowTranslucentStatus" tools:ignore="NewApi">true</item> </style> 

和可绘制文件夹中的flash_screen.xml。

 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@android:color/white"></item> <item> <bitmap android:src="@drawable/background_noizi" android:gravity="center"></bitmap> </item> 

“background_noizi”是可绘制文件夹中的png。 我希望它有帮助

前段时间我创build了一个支持尺寸的excel文件
希望这对别人有帮助

说实话,我失去了这个想法,但它涉及到另一个屏幕function的大小(不仅密度)
https://developer.android.com/guide/practices/screens_support.html
请告诉我是否有错误

链接1:dimensions.xlsx

Link2:dimensions.xlsx

**如果您正在寻找各种主要设备的屏幕细节**

去material.io