Android和支持多屏幕布局

时间:2011-03-25 12:32:02

标签: android screen-resolution screen-size

我正在完成一个Android应用程序,剩下的就是调整多个设备的UI布局和图形。我需要在屏幕上的特定位置放置特定元素。

Android文档解释了多屏分辨率和大小的分类方式,并解释了资源标记系统。

例如,WVGA800 (480x800)WVGA854 (480x854)都被归类为普通高密度屏幕。为了满足这些需求,您需要创建一个名为“layout”的文件夹(已经存在“normal”)和“drawable-hdpi”。

问题在于,即使您使用“dp”单位,也无法区分同一分类的两个设备。如何为WGA800和WGA854单独提供布局/绘图?

比率差异很大,用户很容易注意到不良缩放,而且我需要像分数和计时器这样的东西出现在背景图像的特定位置。

同样的问题适用于{WQVGA400(240x400),WQVGA432(240x432)}和{WVGA800(480x800),WVGA854(480x854)}对。如何为WQVA400和WQGA432提供布局/绘图?

3 个答案:

答案 0 :(得分:15)

我认为你正在走向地狱之路。

Android在各种各样的设备上运行,每周都有更多,并且许多格式尚不存在,但会引入新的变量。因此,即使您成功了,一个屏幕尺寸略有不同的新设备也会失败。

使用特定的屏幕分辨率为Android设计是一个错误,并且类似于如果您强制所有页面在网络上完全相同的尺寸而发现的问题,它很少运行良好(例如,即使是整齐的修复-width网站将在移动设备上惨遭失败。)

Android设计用于支持所有这些变化,但如果您尝试在每个屏幕尺寸上获得像素完美的绝对定位渲染,那么您就是在逆流而行。它可能非常痛苦,非常耗时且昂贵,并且可能最终失败。即使你成功了,你将如何在所有这些屏幕变体上测试它?这听起来像测试地狱。

我强烈建议您接受不能完全按照您的需要做所有事情,而是看看如何使用相对于彼此流畅渲染对象的方式,以便应用程序在所有不同的变体中看起来很好,使用每组分辨率的不同布局,以改善不同尺寸屏幕上的体验。

答案 1 :(得分:5)

是的,这是可能的:

首先,您必须创建一个display-class实例。 之后,您将获得显示器的宽度和高度。 然后,您可以使用if运算符检查循环中的每个分辨率,并设置所需的图像。

示例:

ImageView iview=(ImageView)findViewById(R.id.imageView1);
//here are the Bitmaps optimized for each screen resolution 
Bitmap[] bitmaps={BitmapFactory.decodeResource(getResources(), R.drawable.icwvga800),BitmapFactory.decodeResource(getResources(), R.drawable.icwvga854),(...)};
// In this list all supported screensizes are defined
int[][] possibleScreenSolutions={{480,800},{480,854},{240,400},{240,432},{480,800},{480,854}};
Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
int[] ScreenSolution={display.getWidth(),display.getHeight()};
// Compare the real screen solution with the all supported ones
for(int i=0;i<possibleScreenSolutions.length;i++){
    if((ScreenSolution[0]==possibleScreenSolutions[i][0])&&(ScreenSolution[1]==possibleScreenSolutions[i][1])){
            iview.setImageBitmap(bitmaps[i]);// set the image
    }
}

我同意Ollie C:检查所有决议太混乱了,但这至少是可能的。

我已经测试了它:它有效。

答案 2 :(得分:2)

除了本页其他地方的答案/评论之外,我还想回答我自己的问题,提请注意可以引入的屏幕资源类型。我不相信这在Android文档中很明确,但就drawable而言,你可以在dpi标签之上添加屏幕尺寸标签到可绘制文件。

例如,添加名为drawable-large-mdpi的文件夹是有效的,具有大屏幕和中等分辨率的设备将从此处提取资源(如果可以)。但是警告,切换标签的顺序很重要:声明drawable-mdpi-large是一个错误。