Android和支持多种屏幕布局

Android和支持多种屏幕布局

问题描述:

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

Android的文档解释了如何在多种屏幕分辨率和大小进行分类,并解释了资源标签系统。

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

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

的比例是十分不同的是,用户很容易注意到不良比例,这是我需要的东西就像一个分数,计时器出现在对背景图像的特定地点加剧。

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

+0

可能不是您正在寻找的答案,但您可以获得屏幕宽度和高度,然后可以调整图像大小或将分数和计时器放在合适的位置。 – Rajkiran 2012-03-15 16:48:58

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

运行Android更每周一个巨大的各种设备,以及多种格式不存在尚未反而会引入新的变量。所以,即使您成功了,屏幕尺寸稍有不同的新设备也会失败。

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

Android已经被设计为支持这一切的变化,但如果你试图让你在畅游逆市每个屏幕尺寸完美的像素绝对定位的渲染。这很可能非常痛苦,非常耗时且昂贵,并且可能最终失败。即使你成功了,你将如何在所有这些屏幕变体上进行测试?这听起来像是在测试地狱。

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

+2

非常感谢。但我需要大声呼喊! – SK9 2011-03-25 12:49:58

+0

观察 - 给定分类的所有成员的宽度是相等的。有没有任何声明意图保持这种方式? – SK9 2011-03-25 13:09:02

+0

@ SK9我认为最好假定Android可以运行在几乎任何尺寸,形状,方向以及任何存在或不存在的功能(GPS,网络,键盘等)的设备上,并且显示器遵循提供的概念并为其定制 - 纵向/陆地,ldpi/mdpi/hdpi/xhdpi,屏幕尺寸等等。这并不容易,但是从长远来看,这不是件容易的事情,而且很有可能这款应用程序在大多数设备上都能正常工作 – 2011-03-25 14:10:43

除了本页其他地方的答案/评论,我想发表另一个回答我自己的问题,提请注意可以引入的屏幕资源类型。我不确信这在Android文档中已经清楚,但就绘图而言,您可以将屏幕大小标记添加到dpi标记顶部的可绘制文件。

例如,添加一个文件夹,名为drawable-large-mdpi是有效的,如果他们能与大屏幕和中等分辨率的设备将拉动资源从这里开始。但是,警告切换标签的顺序很重要:声明drawable-mdpi-large是错误的。

是的,这是可能的:

首先你必须创建一个显示类的实例。 之后,您将获得显示屏的宽度和高度。 然后,您可以通过使用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 
    } 
} 

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

我已经测试过它:它的工作原理。