Android 启动画面图像尺寸适合所有设备

2024-03-15

我有一个全屏 PNG,我想在启动时显示。只有一个错误,我不知道 每个可绘制文件夹中放置的大小是多少(ldpi, mdpi, hdpi, and xhdpi)。我的应用程序应该在所有手机和平板电脑上运行良好且美观。我应该创建什么尺寸(以像素为单位)才能使启动画面在所有屏幕上显示良好?


免责声明

这个答案是2013年的,已经严重过时了。从 Android 3.2 开始,现在有 6 组屏幕密度。这个答案将尽快更新,但没有预计到达时间。请参阅官方文档 http://developer.android.com/guide/practices/screens_support.html对于目前所有的密度(尽管关于特定像素大小的信息总是很难找到)。

这是 tl/dr 版本

  • 创建 4 个图像,每个屏幕密度对应一个图像:

    • 超大(xhdpi):640x960
    • 大(hdpi):480x800
    • 中(mdpi):320x480
    • 小(LDPI):240x320
  • Read 9补丁图像介绍 http://developer.android.com/training/multiscreen/screensizes.html#TaskUse9PatchAndroid 开发者指南

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

这样,Android 就会根据设备的图像密度选择合适的文件,然后根据 9-patch 标准拉伸图像。

TL结束;博士。前面有完整的帖子

我正在回答与设计相关的问题。我不是开发人员,因此我无法提供用于实现所提供的许多解决方案的代码。唉,我的目的是帮助那些像我帮助开发第一个 Android 应用程序时一样迷失的设计师。

适合所有尺寸

借助 Android,公司可以开发几乎任何尺寸、任何分辨率的手机和平板电脑。因此,启动画面没有“正确的图像尺寸”,因为没有固定的屏幕分辨率。这给想要实现启动画面的人带来了问题。

您的用户真的想看到启动画面吗?

(顺便说一句,可用性专家在某种程度上不鼓励启动画面。有人认为,用户已经知道他点击了哪个应用程序,并且没有必要用启动画面来标记您的图像,因为它只会中断用户体验“广告”。但是,它应该用在初始化时需要大量加载的应用程序(5s+),包括游戏等,这样用户就不会怀疑应用程序是否崩溃)

屏幕密度; 4节课

因此,鉴于市场上手机的屏幕分辨率如此之多,谷歌实施了一些可以提供帮助的替代方案和巧妙的解决方案。首先你要知道的是Android是分开的ALL屏幕分为 4 种不同的屏幕密度:

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

您(如果您是设计师)需要了解的是,Android 基本上会根据设备从 4 张图像中进行选择来显示。所以你基本上必须设计 4 个不同的图像(尽管可以为不同的格式开发更多图像,例如宽屏、纵向/横向模式等)。

考虑到这一点,请记住:除非您为 Android 中使用的每种分辨率设计屏幕,否则您的图像将拉伸以适合屏幕尺寸。除非您的图像基本上是渐变或模糊的,否则拉伸时您会出现一些不需要的扭曲。因此,您基本上有两个选择:为每个屏幕尺寸/密度组合创建一个图像,或者创建四个 9 块图像。

最难的解决方案是为每种分辨率设计不同的启动屏幕。您可以首先按照末尾表中的解决方案进行操作这一页 http://developer.android.com/guide/practices/screens_support.html#testing(还有更多。示例:960 x 720 未列出)。假设图像中有一些小细节,例如小文本,则必须为每种分辨率设计多个屏幕。例如,在中等屏幕上显示的 480x800 图像可能看起来不错,但在较小的屏幕(密度/dpi 较高)上,徽标可能会变得太小,或者某些文本可能变得难以阅读。

9 块图像

另一个解决方案是创建 9 块图像 http://developer.android.com/tools/help/draw9patch.html。它基本上是图像周围的 1 像素透明边框,通过在此边框的顶部和左侧区域绘制黑色像素,您可以定义允许拉伸图像的哪些部分。我不会详细介绍 9 块图像的工作原理,但简而言之,与顶部和左侧区域中的标记对齐的像素是将重复拉伸图像的像素。

一些基本规则

  1. 您可以在 Photoshop(或任何可以准确创建透明 png 的图像编辑软件)中制作这些图像。
  2. 1 像素边框必须是完全透明的。
  3. 1 像素透明边框必须位于图像周围,而不仅仅是顶部和左侧。
  4. 您只能在此区域中绘制黑色(#000000)像素。
  5. 顶部和左侧边框(定义图像拉伸)只能有一个点 (1px x 1px)、两个点(均为 1px x 1px)或一条连续线(宽度 x 1px 或 1px x 高)。
  6. 如果您选择使用 2 个点,图像将按比例扩展(因此每个点将轮流扩展,直到达到最终的宽度/高度)
  7. 1px 边框必须不包括在预期的基本文件尺寸之外。因此,100x100 9 块图像实际上必须具有 102x102(顶部、底部、左侧和右侧 100x100 +1px)
  8. 9 补丁图像必须以 *.9.png 结尾

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

Example

这是一个 9 块图像,102x102px(最终尺寸为 100x100,用于应用程序目的):

这是同一张图像的 200% 缩放:

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

以下是该图像在应用程序内的 100x100 分辨率下的样子:

如果扩展到 460x140,效果如下:

最后要考虑的一件事。这些图像在显示器屏幕和大多数移动设备上可能看起来不错,但如果设备的图像密度 (dpi) 非常高,则图像看起来会太小。可能仍然清晰,但在分辨率为 1920x1200 的平板电脑上,图像会显示为中间的一个非常小的正方形。那么解决办法是什么呢?设计 4 个不同的 9 补丁启动器图像,每个图像用于不同的密度集。为了确保不会发生收缩,您应该为每个密度类别采用最低的通用分辨率进行设计。此处不希望收缩,因为 9-patch 仅考虑拉伸,因此在收缩过程中,小文本和其他元素可能会失去可读性。

以下是每个密度类别的最小、最常见分辨率的列表:

  • 超大(xhdpi):640x960
  • 大(hdpi):480x800
  • 中(mdpi):320x480
  • 小(LDPI):240x320

因此,按照上述分辨率设计四个启动屏幕,展开图像,在画布周围放置 1px 透明边框,并标记哪些行/列将是可拉伸的。请记住这些图像将用于ANY设备属于密度类别,因此您的 ldpi 图像 (240 x 320) 可能会在具有较小图像密度 (~120 dpi) 的超大平板电脑上拉伸至 1024x600。因此,只要您不想在启动画面中使用照片或复杂的图形,9 片就是最佳的拉伸解决方案(在创建设计时请记住这些限制)。

同样,避免这种拉伸发生的唯一方法是为每种分辨率设计一个屏幕(或者为每种分辨率-密度组合设计一个屏幕,如果您想避免图像在高/低密度设备上变得太小/太大),或者告诉无论发生拉伸,图像都不会拉伸并具有背景颜色(另请记住,由于颜色配置文件的原因,Android 引擎渲染的特定颜色可能看起来与 Photoshop 渲染的相同特定颜色不同)。

我希望这是有道理的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 启动画面图像尺寸适合所有设备 的相关文章

  • Cordova iOS 启动画面

    我无法让闪屏停留在页面加载之前 我已经阅读了谷歌搜索第一页 第二页和第三页中的所有条目 我阅读了 stackoverflow 上发布的所有问题 包括一个很好的解释 https stackoverflow com questions 1800
  • 使用DBFlow,如何加密已经存在的数据库?

    我正在使用 DBFlow 来处理项目中的数据库 并且我想对现有数据库进行加密 我知道我可能必须删除现有的未加密数据库并创建另一个加密数据库 我也知道我可以将 SQLCipher 与 DBFlow 一起使用 如上所述文档 https gith
  • 模拟器中 Google Wear 上的语音识别器没有语音输入

    我试图使用 Google Wear 网站上的自由形式语音输入 在 hello world 示例中 我刚刚添加了对 textView 的单击 它确实从语音意图中调出 立即发言 活动 但模拟器无法检测到我的麦克风发出的任何声音 我使用的是 Ma
  • Xamarin 分步向导 Android 视图

    我想在 Xamarin c 中构建一个 android 活动 用于逐步注册和 或信息 我怎样才能做这样的事情 谁能给我一个代码示例或其他东西 谢谢 基本上你需要使用一个名为 a 的元素ViewPager 并且每个页面都会不同Fragment
  • 通过代码在创建时突出显示 ListView 项目

    我想在创建 listView 时突出显示 ListView 的第一行 0 我尝试了不同的方法 就像您在注释代码中看到的那样 但没有任何效果 这很奇怪 因为 OnItemClickListener 中的突出显示工作正常 它通过 xml 选择器
  • 在工具栏下显示内容

    您好 我试图简单地将我的内容放在工具栏下方 但是当我运行我的应用程序时 某些内容本应位于工具栏下方 却隐藏在工具栏后面 我已经阅读了有关使用框架布局来尝试将其分离的内容 但我有点卡住了 我目前正在使用该软件提供的基本 android stu
  • Android ToggleButton 始终检查

    如果切换按钮处于选中或取消选中状态 我想存储在 SharedPreferences 中 toggle setOnCheckedChangeListener new OnCheckedChangeListener public void on
  • Cordova - 启动后出现白屏,控制台中没有例外

    我已经离开我的 Cordova 应用程序一段时间了 但昨天刚刚进行了一次新的克隆 发现它出现了 死机白屏 症状 启动画面显示 程序加载 然后我就得到一个空白屏幕 更多细节 CLI 科尔多瓦 6 1 1 安卓 5 1 1 ios 4 1 1
  • Play 商店中的应用描述更新

    我想更新应用程序的描述以及 Play 商店上的屏幕截图 但应用程序保持相同 即相同的版本号 我不想发布新应用程序 因为应用程序中没有任何更改 这可能吗 谷歌也会要求更新应用程序吗 您可以更新描述 也可以更改屏幕截图 您的应用程序将保持不变
  • 更改语言 Flutter 的按钮

    我正在 Flutter 中构建一个应用程序 到目前为止 我正在使用 JSON 国际化 其中应用程序的语言基于用户手机中默认的语言 它工作得很好 但我想给用户有机会在不更改手机系统语言设置的情况下更改语言 只需单击按钮 然后应用程序即可更改语
  • java.lang.IllegalAccessError:预验证类中的类引用在运行测试项目时解析为意外实现?

    在实施项目工作正常之后 我使用第三方库 zxing 实施了项目 然后在我编写了一个测试项目对我的项目进行单元测试之后 运行测试项目后 主项目 类及其方法没有给出任何信息错误 但如果在主项目的该方法中使用任何 zxing 框架类 则会在运行时
  • Android L,使用 joda.time 库的异常

    该应用程序适用于所有设备 包括 nexus 5 和 nexus 7 在 Android L 预览版上运行相同的应用程序时 应用程序崩溃了 我一直在调试 并且调用 DateTime 构造函数发现了异常 public static String
  • 如何在 60 分钟后删除共享首选项

    我想存储登录数据 但希望在 60 分钟后删除该数据 执行此操作的正确方法是什么 在这 60 分钟内可以关闭 停止 打开应用程序 我不想使用内部数据库 这是我的访问代码SharedPreferences sharedpreferences g
  • AndEngine MenuScene - 无法单击按钮

    我有一个关于 android 和 andengine 的小问题 这是我的主菜单的源代码 AbstractScene is extending Scene public class MainMenuScene extends Abstract
  • Android 操作项上的通知徽章

    我想在操作栏中放置的购物车图像上添加一个通知徽章 并以编程方式操作它 有帮助吗 您可以显示自定义MenuItem on ActionBar通过创建一个custom layout for MenuItem 要设置自定义布局 您必须使用菜单项属
  • 使 Recyclerview 固定高度并可滚动

    已解决以下检查答案 所以我试图为我的 Android 应用程序创建评论功能 我想在 recyclerview 中显示评论 然后在 recyclerview 下方有一个按钮和文本视图来添加评论 我想让 recyclerview 具有一定的高度
  • 用于请求带有临时缓存的远程 Observable 的 RxJava 模式

    用例是这样的 我想暂时缓存最新发出的昂贵的Observable响应 但在它过期后 返回到昂贵的源Observable并再次缓存它 等等 一个非常基本的网络缓存场景 但我真的很难让它工作 private Observable
  • 调试android数据绑定?

    谁能告诉我如何调试或找到数据绑定生成的代码 从this https www youtube com watch v NBbeQMOcnZ0链接我发现它生成了所需的代码 我猜您正在寻找自动生成的绑定 java 文件 我也在寻找他们 最后我在这
  • 在数组列表中过滤 Filterable 不取消之前的过滤

    我看过过滤器方法文档 其中显示调用过滤器会取消所有先前未执行的过滤请求 并发布一个稍后将执行的新过滤请求 但我收到的实际回调有些不同 在我的实现中 它不会取消先前的过滤器请求并调用publishResults 最近一次搜索条件后的上一次搜索
  • 如何正确处理 ListView 内的 Android EditText 输入?

    在我的应用程序中 我有一个在 a 中添加 删除 编辑记录的活动SortedMap 该活动作为以下活动的延伸实施ListActivity 我已经实现了自定义ArrayAdapter对于收藏品 Every ListView项目 对应于基础记录

随机推荐