9

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

Android 文档解释了如何对多种屏幕分辨率和尺寸进行分类,并解释了资源标记系统。

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

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

比率差异很大,用户很容易注意到缩放不良,而我需要诸如分数和计时器之类的东西出现在背景图像的特定位置,这加剧了这种情况。

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

4

3 回答 3

15

我想你正在通往地狱的路上。

Android 可以在种类繁多的设备上运行,每周更多,而且许多格式还不存在,但会引入新的变量。所以即使你成功了,一个屏幕尺寸略有不同的新设备,你的应用程序也会失败。

使用特定的屏幕分辨率为 Android 进行设计是错误的,并且类似于您在网络上强制所有页面的大小完全相同时会发现的问题,它很少能很好地工作(例如,即使是一个整洁的固定宽度网站将在移动设备上惨遭失败)。

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

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

于 2011-03-25T12:40:37.873 回答
5

是的,这是可能的:

首先,您必须创建一个显示类的实例。之后,您将获得显示器的宽度和高度。然后,您可以使用 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:检查所有分辨率太令人困惑,但至少是可能的。

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

于 2012-03-16T10:59:33.803 回答
2

除了本页其他地方的答案/评论之外,我想对我自己的问题发布另一个答案,以提请注意可以引入的屏幕资源类型。我不相信 Android 文档中明确说明了这一点,但就可绘制对象而言,您可以将屏幕尺寸标签添加到 dpi 标签之上的可绘制文件。

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

于 2011-04-01T02:45:20.490 回答