2010-12-03 87 views
2

我想在我的应用程序使用高细节的图像作为backrgound,和我有我的设计师,因为这:-D的问题真实背景图像的大小(与状态栏)

到现在为止,我们已经得到了根据最常见的设备的屏幕大小的3种图像尺寸(每密度之一),因为我们知道:

  • 低:240×320(即HTC纹身)
  • 中旬:320×480(例如HTC Magic)
  • 高:480×800(例如Nexus One)

问题是,当我设置一个图像作为背景时,它被调整大小,我可以看到它上面有几条水平的“鬼线”。因此我们决定用“高度 - 负 - 状态栏的高度”(仅适用于高密度的图像,就像测试)调整图像大小,最终得到480 + 752像素的图像(根据http://developer.android.com/guide/practices/ui_guidelines/icon_design.html,状态栏的高度是48像素)

但它仍然显示了这些“幽灵”行,所以我们认为它正在重新调整......

有人能帮助我吗?我只是想要一个正常的背景下,没有调整大小,但我不知道真正的尺寸...

谢谢:-D

回答

13

你正在让自己处于持续痛苦的状态。你根本无法根据精确的分辨率进行设计;这种设备的变化太多了,因此当你遇到新的设备时,你会不停地拍着脸。 Android有很多处理这种屏幕变化的设施,比如9个补丁,它的密度管理,布局管理器等。如果你利用这些,你会很高兴;如果你不这样做,你会一直发誓。

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

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

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使边框的外边缘伸展。这样,即使有一个分辨率略有不同的新设备,它仍然可以适当调整,无需任何拉伸。

+0

Thanks!我们无法在应用的第一个版本中支持所有解决方案......但是我们已经记住了这些:--D。使视图成为一个ImageView是可能的,但我们需要设置为背景,因为它会有不同的TextViews和一个ProgressBar覆盖它和...(试图避免改变图像),9nine不是一个好的解决方案(它得到丑陋的时候它被拉伸......)所以这就是为什么我要求真正的大小。但如果我们最终必须改变形象,我想我们会做到这一点。再次感谢你! – 2010-12-03 16:20:39

+0

不客气,如果有帮助!但是如果你从NinePatch的扩大中得到一个难看的结果,那么NinePatch或者实现都会出现问题。 NinePatch的一点是它可以扩展到任何尺寸而不会失真。对于Android来说最好的办法就是避免认为你的应用会有一个特定的分辨率,并且只能处理相对的尺寸和位置。有一件事可能会导致NinePatch问题,如果你将它设置为ImageView的src属性。你将不得不使用背景属性。我会在我的回答中澄清。 – kcoppock 2010-12-03 16:35:24