针对手机和平板电脑的不同控制器

时间:2011-09-15 13:55:52

标签: android android-activity tablet

有没有办法为一个Android应用程序提供两个不同的Java代码?一个针对手机设备,另一个针对平板电脑设备。

例如,类似HomeActivity.java和HomeActivity-large.java

基本上我想制作一款Android应用程序,其解析后会有不同的布局。

我知道我可以使用layout-large来为大型设备设置特定的布局。我不确定如何为平板电脑设置特定逻辑,为电话目标设置另一个逻辑。

我想这样做的原因是我想在屏幕上进行API调用,我不想在手机上进行。

作为一种替代方式,我曾考虑使用布尔值(我不确定哪一个)来测试应用程序运行的设备类型。但我担心它会变得混乱。

另一件事可能是创建一个包含我的应用程序的所有功能的库,然后使用该库创建两个不同的应用程序。该解决方案的问题在于某些代码将被复制。

有什么建议吗?

2 个答案:

答案 0 :(得分:3)

选项1 : 要将一个项目编译为一个或多个应用程序,您需要使用条件编译。基本上,这样的事情

//#ifdef Phone
// do something here
//#else Tablet
// do something else
//#endif

参见Java (Eclipse) - Conditional compilation 关于如何在Eclipse中使用条件编译Android。

选项2 : 您可以在运行时测试屏幕大小以确定要显示的UI。参见:

http://developer.android.com/guide/practices/screens_support.html

xlarge screens are at least 960dp x 720dp
large screens are at least 640dp x 480dp
normal screens are at least 470dp x 320dp
small screens are at least 426dp x 320dp

答案 1 :(得分:1)

不同的解决方案,只是我能想象的前两个:

1)在平板电脑布局上放置一个具有特定ID且可见属性设置为GONE的视图。在夸大布局后,使用findViewById(...)检查视图是否存在。如果结果为null,那么您将处于智能手机布局中,否则您将使用平板电脑。这种方法完全依赖于自动化系统设备的分辨率检测 2)使用此代码段以像素为单位获取屏幕的宽度和高度,并自行决定执行的代码。

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
Log.d("log", "Screen is " + metrics.widthPixels + "x" + metrics.heightPixels);
相关问题