【问题标题】:Different controllers for phone and tablet targets用于手机和平板电脑目标的不同控制器
【发布时间】:2011-09-15 13:55:52
【问题描述】:

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

例如,HomeActivity.java 和 HomeActivity-large.java 之类的东西

基本上,我想制作一个 Android 应用,根据其分辨率具有不同的布局。

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

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

作为另一种方法,我考虑过使用布尔值(我不确定是哪一个)来测试应用程序在哪种设备上运行。但我担心它会变得混乱。

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

有什么建议吗?

【问题讨论】:

  • 只有2个应用程序,一个用于平板电脑,一个用于手机作为一个项目。如果为手机编译它有一个 UI,而为平板电脑编译则有另一个。
  • 我正在努力按照你说的去做。听起来很有趣。你会怎么做“如果为手机编译它有一个用户界面并且为平板电脑编译有另一个”部分?

标签: android android-activity tablet


【解决方案1】:

选项 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。我发现选项 2 很容易实现并且也很有用(使用 getResources().getConfiguration ().screenLayout)
【解决方案2】:

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

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

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

【讨论】:

  • 感谢您的评论。这两种解决方案听起来都是可行的,但有点 hacky。也许作为最后的手段。我真的很想要一种干净的方式来实现它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 2017-03-16
  • 1970-01-01
  • 2018-05-10
  • 1970-01-01
  • 1970-01-01
  • 2014-05-28
相关资源
最近更新 更多