Android的初始屏幕图像大小,以适应所有设备
我有一个全屏幕PNG我想显示在飞溅。 这里只有一个错误,我不知道每个可绘制文件夹( ldpi
, mdpi
, hdpi
和xhdpi
)放入的大小。 我的应用程序应该在所有手机和平板电脑上运行良好。 我应该创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个不同的屏幕密度:
- 低密度(ldpi〜120dpi)
- 中等密度(mdpi〜160dpi)
- 高密度(hdpi〜240dpi)
- 超高密度(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的像素是将被重复以拉伸图像的像素。
一些基本规则
- 您可以在photoshop中制作这些图像(或者任何可以准确创build透明png的图像编辑软件)。
- 1像素边框必须是完全透明的。
- 1像素透明边框必须围绕您的图像,而不仅仅是顶部和左侧。
- 您只能在该区域绘制黑色(#000000)像素。
- 顶部和左边界(定义图像拉伸)只能有一个点(1px x 1px),两个点(都是1px x 1px)或一个连续线(宽x 1px或1px x高)。
- 如果select使用2个点,图像将按比例扩展(所以每个点将轮stream扩展,直到达到最终的宽度/高度)
- 除了预期的基本文件尺寸外,1px边框还必须添加。 所以一个100×100 9-补丁图像实际上有102×102(上,下,左,右100×100 + 1px)
- 9贴片图像必须以* .9.png结尾
因此,您可以在徽标的任一侧(顶部边框)放置1个点,在其上下两个点(左边框)上放置1个点,这些标记的行和列将是唯一要拉伸的像素。
例
这是一个9幅图像,102×102像素(100×100最终尺寸,用于应用程序):
这是相同图像的200%缩放:
注意顶部和左侧的1px标记表示哪些行/列将展开。
以下是这个图片在应用程序内100×100的样子:
如果扩展到460×140,这是什么意思:
最后要考虑的一件事。 这些图像可能在您的显示器屏幕和大多数手机上看起来很好,但是如果设备具有非常高的图像密度(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