有没有办法为一个Android应用程序提供两个不同的Java代码?一个针对手机设备,另一个针对平板电脑设备。
例如,类似HomeActivity.java和HomeActivity-large.java
基本上我想制作一款Android应用程序,其解析后会有不同的布局。
我知道我可以使用layout-large来为大型设备设置特定的布局。我不确定如何为平板电脑设置特定逻辑,为电话目标设置另一个逻辑。
我想这样做的原因是我想在屏幕上进行API调用,我不想在手机上进行。
作为一种替代方式,我曾考虑使用布尔值(我不确定哪一个)来测试应用程序运行的设备类型。但我担心它会变得混乱。
另一件事可能是创建一个包含我的应用程序的所有功能的库,然后使用该库创建两个不同的应用程序。该解决方案的问题在于某些代码将被复制。
有什么建议吗?
答案 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);