如何分离电视的 Android 布局和 phone/tablet?

How to separate Android layout for TV and phone/tablet?

我有一个可以在 phone/tablet 上运行的 android 应用程序。我想添加对 Android 电视的支持。

官方文档说要为电视创建一个单独的 activity。

phone 和 TV 之间的唯一区别是表示层(即视图),所以我只需要创建新的布局,而不是控制器。

我创建了适用于电视的布局并使用相同的控制器。问题是我无法指定哪些布局用于电视,哪些布局用于 phones/tablets。

我无法对屏幕尺寸和设备类型做出假设。有些 phone 的屏幕分辨率比电视高,反之亦然。

如何为 phone 和电视提供不同的布局?

如果有更好的方法无需编写(或复制)我现有的 java 代码,我也会接受。

How can I provide different layouts for phone and TV?

如果这是官方 Android 电视环境,AFAIK res/layout-television/ 应该可以。见传说Table 2.

您可以使用此布尔检查来判断您是否在看电视:

    context.getPackageManager().hasSystemFeature("com.google.android.tv")

一种更可靠的方法来识别它是否是电视,或者 Phone 可能是。 它甚至可以检查它是手表、电器还是其他设备。

UiModeManager uiModeManager = (UiModeManager) getSystemService(UI_MODE_SERVICE);
if (uiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_TELEVISION) {
    Log.d(TAG, "Running on a TV Device");
} else {
    Log.d(TAG, "Running on a non-TV Device");
}