1

我正在开发一个 Android 2.2 应用程序。

使用 Eclipse 图形布局测试我的布局我有一个问题:它在 Galaxy Nexus 上看起来不太好。

我有四种图像类型:ldpi、mdpi、hdpi 和 xhdpi。一个布局和四个 dimens.xml 文件(ldpi、mdpi、hdpi 和 xhdpi)。

如果我修改dimens.xml 使其看起来很好,Galaxy Nexus但在其他设备上看起来不太好,例如Nexus One(在eclipse 图形布局中)。所以,我想我需要别的东西。

阅读Supporting Multiple Screens我看到还有另一种方法:我可以使用sw<N>dp. 但是这是从Android 3.2开始的,我需要支持Android 2.2。

我需要添加什么才能使它在 Galaxy Nexus 上看起来不错?

连结一
在此处输入图像描述



银河关系

在此处输入图像描述

4

3 回答 3

2

另一种方法我经常碰巧用它来像 Web 开发人员一样思考。尝试使您的布局看起来不错,布局向任何方向拉伸。将重要部分居中并确保后面的图像可以双向拉伸。然后使用 imageview 作为背景并将其设置为 match_parent 并将 scaletype 设置为 centerCrop。它不适用于一切,但我很确定它适用于您的样品。

在您的情况下,您可以将您现在拥有的所有内容放入另一个容器(例如RelativeLayout)中,然后将其居中并设置尺寸或使其成为wrap_content。然后,新的顶部容器应该 match_parent 并具有我小时候谈到的 imageview。

于 2012-08-02T14:25:51.477 回答
1

对于要使用屏幕尺寸的布局,您应该为图像保留不同的密度,例如

布局大而不是布局hdpi

编辑

你想要一个这样的文件夹布局:

  • res/drawable-ldpi/[你的图片资源]
  • res/drawable-mdpi/[你的图片资源]
  • res/drawable-hdpi/[你的图片资源]
  • res/drawable-xhdpi/[你的图片资源]
  • res/layout/[你的布局 xml 文件]
  • res/layout-large/[为大屏幕修改的布局 xml 文件]
  • res/layout-small/]为小屏幕修改的布局 xml 文件]

有关详细信息,请参阅此链接:http: //developer.android.com/training/basics/supporting-devices/screens.html

编辑2

如果您必须坚持一种布局,那么您需要编辑 res/values-large/dimes.xml 中的值以影响大屏幕设备。

如果您有超大的设备屏幕,那么您需要为每个屏幕尺寸编辑 res/values-xlarge/dimens.xml 等。

于 2012-08-02T14:12:03.793 回答
0

我的第一个问题与这个非常相似。

简而言之,您的问题是您需要根据您在背景上显示的图像放置视图并调整其大小。可悲的是,没有一些解决方法,android 不支持它。

在 silverlight&WPF 上有一个 viewBox 可以自动完成。flash 有它,因为它是基于矢量的。iphone 拥有它是因为它的所有屏幕都具有相同的纵横比。但是android还没有解决方案。

我什至在谷歌开发者日问过同样的问题,讲师告诉我的是我应该使用 openGL,即使我的应用程序非常简单。

现在,你可以做的是:

  1. 最简单的方法:使用带权重的多个 LinearLayout。也可以在其中使用带有权重的视图,以便制定有关位置和大小的规则。Lint 会告诉您这对性能不利,但如果您的视图根本没有移动/调整大小,那应该没问题。

  2. 先进的方法:创建你自己的布局,它会确切地知道根据你给它的东西放置视图的位置(以及大小)。我过去做过,但我使用 imageViews 而不是按钮(因为我不得不这样做)。

这种方法也有一个错误(也可以在解决方案 #1 中找到):在某些屏幕上,它们的图像与背景图像不匹配。如果这不是你的情况,你也可以这样做。

  1. 硬核方式:使用 openGl 。使用 andEngine 或 LibGdx 等第三方库会更容易。

  2. 网络开发者的方式:把它全部放在一个网站上,展示它,使用带有 android 的界面处理触摸。

  3. 无按钮方式:如果您不想使用按钮,可以使用简单的数学运算来了解用户按下的位置,而不使用上述任何解决方案。

顺便说一句,如果你像我看到的那样拉伸图像,它就不会保持它的纵横比。你也需要处理它。使用 openGl 可以帮助你。

于 2012-08-02T19:27:10.957 回答