android中的真实背景图像大小(带状态栏)

Posted

技术标签:

【中文标题】android中的真实背景图像大小(带状态栏)【英文标题】:Real background image size in android (with status bar) 【发布时间】:2011-05-19 20:09:30 【问题描述】:

我想在我的应用程序中使用高细节图像作为背景,因此我的设计师遇到了问题:-D

据我们所知,到目前为止,我们已经根据最常见设备的屏幕尺寸获得了三种图像尺寸(每种密度一种):

低:240 x 320(例如 HTC 纹身) 中:320 x 480(例如 HTC Magic) 高:480 x 800(例如 Nexus One)

问题是,当我将图像设置为背景时,它会调整大小,并且我可以在其上看到几条水平“幽灵”线。

所以我们决定用“height-minus-statusbar's height”调整图像的大小(仅在高密度图像中,就像测试一样),最终得到一个 480 + 752 px 的图像(根据http://developer.android.com/guide/practices/ui_guidelines/icon_design.html,状态栏的高度为 48px)

但它仍然显示那些“鬼”线,所以我们认为它正在重新调整大小......

有人可以帮我吗?我只想要一个普通的背景,没有调整大小,但我不知道真实的尺寸......

谢谢你:-D

【问题讨论】:

【参考方案1】:

你让自己处于持续的痛苦状态。您根本无法针对精确的分辨率进行设计;设备有太多的变化,这样做你会在遇到新设备时不断地被打耳光。 Android 有很多工具可以处理这种屏幕变化,例如 9-patch、密度管理、布局管理器等。如果你利用了这些,你会很高兴;如果你不这样做,你会一直在骂人。

但如果你想发誓,我无法阻止你。只是请不要上网抱怨Android碎片。 :)

至于您的图像由于状态栏而被缩放 - 是的,状态栏会从屏幕中取出一大块。多少没有定义,因此设备之间可能会略有不同。由 Activity.getWindow().setBackgroundDrawable() 设置的窗口背景将延伸到状态栏(以及 IME 或其他可变系统装饰)后面,因此至少使用它会减少变化。也就是说,由于其他原因,实际的显示空间可能会从物理屏幕尺寸中被分割出来;它故意没有准确定义应用程序可以在屏幕的哪个部分播放。

【讨论】:

我明白了。我想这就是答案……我更喜欢 NinePatches,我想我会要求我的设计师制作更简单的背景图像。谢谢【参考方案2】:

不要忘记 Droid A855(480x854 分辨率)或 Galaxy Tab (1024x600) 或许多其他分辨率。如果您需要像素完美,您最好的选择是使图像具有其类别中最大分辨率的大小(即,对于普通大小的 hdpi 屏幕为 480x854),然后只需将其设置为 ImageView,带有 scaleType的 centerCrop。 再想一想,ImageView 可以工作(如果使用 android:background 属性)但没有必要。您可以简单地将 NinePatch 背景设置为根布局的背景属性(例如,RelativeLayout、LinearLayout)。如果 NinePatch 的格式正确,则背景将居中,并且框架将拉伸以适应剩余空间而不会变形。在 Nexus One 上,您将切断图像顶部和底部 27 个像素,但不会调整其大小。

根据图像的类型,更好的建议是将其中的一部分制作成 NinePatch。例如,如果它的外边缘有一个小边框或框架,则将背景的主要部分缩小(430 x 750?),并通过 NinePatch 使框架的外边缘拉伸。这样,即使有分辨率稍有不同的新设备,它仍然可以缩放以适当地适应,而不会进行任何拉伸。

【讨论】:

谢谢!我们不能在应用程序的第一个版本中支持所有分辨率......但我们已经记住了它们 :-D。使视图成为 ImageView 是可能的,但我们需要设置为背景,因为它将有不同的 TextViews 和一个 ProgressBar 覆盖它......并且(试图避免更改图像),9nine 不是一个好的解决方案(它得到拉伸时很难看...)所以这就是我要求实际尺寸的原因。但如果我们必须在最后改变形象,我想我们会这样做。再次感谢您! 如果有帮助,不客气!但是,如果您从放大的 NinePatch 中得到一个丑陋的结果,那么 NinePatch 或实现有问题。 NinePatch 的要点是它可以扩展到任何大小而不会失真。最好使用 Android 来避免认为您的应用程序将具有特定的分辨率,并且只使用相对大小和定位。可能导致您的 NinePatch 问题的一件事是,如果您将其设置为 ImageView 的 src 属性。您必须使用背景属性。我会在我的回答中澄清这一点。 您好 :-D 主要问题是图像由于其细节而无法调整大小...因为我之前使用过几个 NinePatch 图像 :-D (总是作为背景,这就是他们工作的唯一方式)。我想最后我的设计师伙伴会恨我,但我会要求新的可缩放背景。再次感谢:-) 你好。 :P 你真的可以在纯背景之外使用 NinePatches。如果你有一个外框,你只需要在内容的两侧放置一个点(框架的每一侧一个),并为左边缘做同样的事情。等我回家后,如果你愿意,我可以给你举个例子。【参考方案3】:

当使用以下方法时,我也在寻找状态栏后面的背景解决方案:http://developer.android.com/resources/articles/window-bg-speed.html 我现在刚刚使用了 bg 图形顶部的任意空间来补偿状态栏。

我还注意到了条带,我不认为这是因为它正在再次调整大小。本文修复了我的 Nexus S 上的问题: http://stuffthathappens.com/blog/2010/06/04/android-color-banding/(也参考上面链接的 developer.android 文章)

【讨论】:

以上是关于android中的真实背景图像大小(带状态栏)的主要内容,如果未能解决你的问题,请参考以下文章

更改 UINavigationBar 外观背景图像时状态栏颜色更改

Android 背景及状态栏设置集合

如何更改android状态栏的背景颜色

Android 状态栏问题汇总解决方案

EditText 显示状态栏,或导致上面的内容移动而不是调整大小

android导航栏与状态栏颜色及透明度