如何为不同的屏幕开发一个Android应用程序?

时间:2011-08-12 06:25:47

标签: android android-layout user-interface screen

我想开发Galaxy Tab和Android手机的应用程序。标签和手机用户界面非常不同。就像在标签中一样,我们使用了片段等,并且在手机上我们想要使用标签。

我知道通过使用layout-smalllayout-large我可以显示不同的用户界面,但功能如何呢?

我该怎么办?是否有一种简单的方法来处理不同屏幕的功能?或者最终创建两个应用程序会更好吗?

7 个答案:

答案 0 :(得分:6)

首先请务必阅读最近的博文,其中概述了应用程序如何看待不同的屏幕大小并可以根据它们进行调整:

http://android-developers.blogspot.com/2011/07/new-tools-for-managing-screen-sizes.html

这篇文章有一些基本调整的例子 - 为不同的屏幕尺寸提供不同的布局文件。

这也是片段API旨在帮助的东西。如果您已经使用片段编写了UI,那么您就可以使用 - 在选项卡中显示这些内容并不需要完全不同的实现,只需使用片段填充不同的选项卡。

如果您的目标是Android 3.0或更高版本,这很容易,因为操作栏已经有了简单的机制,让其标签允许在片段之间切换。此API演示提供了一个非常简单的使用示例:

http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/ActionBarTabs.html

如果要在较旧版本的平台上运行,那么v4支持库中的片段API就是用于此目的的。这些允许您使用片段编写应用程序,并且仍然可以一直运行到平台的Android 1.6(API 4)。在MR2中,我们还添加了一些示例代码,展示了如何使用旧的选项卡API支持lib片段。

此示例代码包含在现已弃用的TabActivity类中:

http://developer.android.com/reference/android/app/TabActivity.html

答案 1 :(得分:3)

对此没有单一答案 - 这是一个广泛主题。

在开始之前要记住的一件事是,目前网络上有很多代码,假设您可以通过平台版本判断屏幕大小:IE,姜饼的所有内容都是手机,Honeycomb (及以上)是平板电脑。这是一个坏主意。不要这样做:)同时尽量避免使用大量的开关盒,它只根据你从系统中拉出的宽度/高度值执行不同的代码块。我不会描述如何做到这一点,其他人已经给出了答案。

要研究的一件事是Android Compatibility Package - 它允许您在早期版本的Android平台中使用Fragments和Loaders(在Honeycomb中引入)。这种方法的一个常见模式是让你设置一个导航片段&平板电脑(有空间)并排放置的内容片段,但在手机或小屏幕上选择项目时,导航片段会切换到内容片段。

如果您只是想让屏幕尺寸增大和缩小的图像(您没有以编程方式绘制),答案是9-patches

如果适合您的应用,您还可以选择使用Android电子市场的Multiple APK support。链接的页面深入探讨了如何进行设置,并为您提供了一个非常可靠的描述,说明何时使用它以及何时使用单个APK更好。

答案 2 :(得分:2)

尝试将您的应用分成单独的部分,一个包含您作为库开发的核心功能的主干,然后使用具有特定UI设计的相同核心功能的两个独立应用,一个用于Android的平板电脑版本(> 3.0 HoneyComb)和一个用于“电话”版本(< 3.0)。

我对GalaxyTab喜欢的体验(基本上是带有'电话'非HoneyComb版操作系统的平板电脑)是手机布局确实可以很好地适应7英寸屏幕。因此,添加专门为大屏幕制作的专用layout.xml可能就足够了。但是我甚至没有在我自己的应用程序中找到它......

编辑: 也不是说,如果平板电脑运行的是非蜂窝式操作系统,2.2或2.3,就像GalaxyTab和许多7英寸平板电脑的情况一样,其功能与手机完全相同,因此如果没有,则不需要进行特定的重新设计UI组件的布局。

编辑: 请阅读this page,了解有关如何在您的应用中支持不同屏幕尺寸的具体详细信息。您可以使用

在清单中指定应用支持的屏幕大小
<manifest ... >
    <supports-screens android:requiresSmallestWidthDp="600" />
    ...
</manifest>

所以鉴于市场现在支持为同一个应用程序上传几个apk,你可以为每个屏幕大小分别编译不同版本的应用程序,市场会根据Manifest中的大小过滤掉它们,所以你甚至应该永远不会必须在代码中检查屏幕大小。

答案 3 :(得分:2)

您可以使用以下方法检索屏幕尺寸:

Display display = getWindowManager().getDefaultDisplay(); 
int width = display.getWidth();
int height = display.getHeight();

您必须确定不同功能需要哪些屏幕尺寸,例如将平板电脑的最小高度和宽度设置为min_tab_heightmin_tab_width。然后检查此屏幕尺寸是否合格:

boolean is_tablet = false;
if (width >= min_tab_width && height >= min_tab_height) {
    is_tablet = true;
}

现在,您可以在将平板电脑功能添加到您的应用之前检查if (is_tablet)(或if (!is_tablet)以获取非平板电脑功能。

答案 4 :(得分:1)

//Determine screen size
if ((getResources().getConfiguration().screenLayout &      Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_LARGE) {     
    Toast.makeText(this, "Large screen",Toast.LENGTH_LONG).show();

}
else if ((getResources().getConfiguration().screenLayout &      Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_NORMAL) {     
    Toast.makeText(this, "Normal sized screen" , Toast.LENGTH_LONG).show();

} 
else if ((getResources().getConfiguration().screenLayout &      Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_SMALL) {     
    Toast.makeText(this, "Small sized screen" , Toast.LENGTH_LONG).show();
}
else {
    Toast.makeText(this, "Screen size is neither large, normal or small" , Toast.LENGTH_LONG).show();
}

答案 5 :(得分:0)

与Phil的方法类似,如果我们能够找到实际的屏幕尺寸,我们可以确定屏幕是否足够大以支持其他功能。这是一个讨论这个问题的主题。 LINK

android.os.Build 文件似乎也有一些信息。

答案 6 :(得分:-1)

使用android.os.Build.VERSION.SDK或Build.VERSION.SDK_INT在运行时获取实际的操作系统。把它放在if或switch条件中并将你的逻辑放在语句中。