【问题标题】:Android Honeycomb application running on ICS (Ice Cream Sandwitch)在 ICE(冰淇淋三明治)上运行的 Android Honeycomb 应用程序
【发布时间】:2012-02-11 04:12:38
【问题描述】:

我有一个为 Honeycomb 开发的应用程序(最初是 3.0),在 ICS 发布后,用户可以使用 ICS 将其安装到他们的手机上,而不仅仅是平板电脑上。如何过滤这些手机?我试过<support-screens> 但这不起作用。这也是一件有趣的事情(至少对我来说),我的应用程序不会缩小到更小的屏幕。我使用了固定大小的控件,但大小以 dp 为单位。

简而言之:

  1. 有人知道如何过滤 ICS 电话吗? (最好来自代码)
  2. 我应该怎么做才能支持 ICS 手机? (我想我需要为 ICS 手机实现一个全新的布局,但我仍然有一个问题,我该如何确定它是手机还是平板电脑?

【问题讨论】:

    标签: android screen android-3.0-honeycomb android-4.0-ice-cream-sandwich


    【解决方案1】:

    如果您只想在平板电脑市场中显示您的应用,请在您的 AndroidManifest.xml 中使用<support-screens> 属性(更多信息here)。确保在 Honeycomb 3.2(x-large、large)和 3.2+(600dp 等)之前使用这两个标识符。

    您所说的“我的应用程序没有缩小”到底是什么意思?您能在这里提供更多信息吗?

    【讨论】:

    • 我不知道为什么,但是当我在三星 Galaxy Nexus 上尝试过这个应用程序时,应用程序启动没有任何问题,因为手机的屏幕分辨率是高清(或全高清?)(x-large,然后更大600dp)。我的意思是“我的应用程序没有缩小”,当我从屏幕启动应用程序时,只有一部分是可见的(中心),我对每个用户控件都使用了 dip,所以理论上它很好。
    • 啊好吧。 Nexus 上的这种行为实际上是意料之中的,因为虽然标准像素的数量大于 600,但下降的数量却不是。 Galaxy Nexus 是一款 xhdpi 设备,这意味着 2 个标准像素相当于 1 个 dip,使其最短宽度为 360dip。具有相同 1280x720 标准分辨率的平板电脑只有 mdpi,因此 1 个标准像素是一个标准倾角。
    【解决方案2】:
    public static boolean isHoneycomb() {
        // Can use static final constants like HONEYCOMB, declared in later versions
        // of the OS since they are inlined at compile time. This is guaranteed behavior.
        return Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB;
    }
    
    public static boolean isTablet(Context context) {
        return (context.getResources().getConfiguration().screenLayout
                & Configuration.SCREENLAYOUT_SIZE_MASK)
                >= Configuration.SCREENLAYOUT_SIZE_LARGE;
    }
    
    public static boolean isHoneycombTablet(Context context) {
        return isHoneycomb() && isTablet(context);
    }
    

    从这里的答案复制:https://stackoverflow.com/a/8427523/253583

    您可能还希望限制 Android Market 允许用户在清单中包含 http://developer.android.com/guide/topics/manifest/supports-screens-element.html 的手机上安装此功能。

    【讨论】:

    • 谢谢。稍加修改,它的工作方式就是我想象的那样。
    【解决方案3】:

    您可以使用检查

    if(Build.VERSION.SDK_INT >= 14) {
        //ics
    }
    

    Build 是 android.os.Build 类

    【讨论】:

    • 谢谢,只见树木不见森林 :)。顺便说一句,第二期有什么想法吗?
    • 无论如何这不好,我无法决定它是手机还是平板电脑。我假设它们具有相同的版本号 (14)。
    • 最好的方法是创建一个 BaseActivity,它根据上述条件的结果询问“工厂”类使用哪种行为。然后 BaseActivity 类将使用一个接口来告诉实际的 Activity 使用什么行为。
    猜你喜欢
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-26
    • 1970-01-01
    • 2012-05-02
    • 2013-03-29
    • 1970-01-01
    相关资源
    最近更新 更多