安卓 - 如何检测小型平板电脑和大尺寸手机的区别?

6
我正在开发的应用程序包含两个不同的布局:一个是针对普通手机的,另一个是针对小型平板电脑(如NOOKcolor)的。决定采用哪一个布局是基于屏幕宽度分辨率(目前为600dip)。在Nook上看起来很棒,但在HTC Rezound上看起来很糟糕,因为它具有720 x 1280的显示屏。在后者上,尽管分辨率更高,但所有内容(文字、图像等)看起来都要大得多,所以它们都挤在一起了。
选择正确的设备的好方法是什么?也许可以检测物理尺寸(4.3英寸与7英寸)与分辨率之间的关系?

有一个 Configuration.screenLayout 位掩码 - 参见这里 https://dev59.com/-G445IYBdhLWcg3wJ258 - dag
2个回答

6

使用以下方法检测您设备的屏幕大小:

    /**
     * Checks if the screen size is equal or above given length
     * @param activity activity screen
     * @param screen_size diagonal size of screen, for example 7.0 inches
     * @return True if its equal or above, else false
     */
    public static boolean checkScreenSize(Activity activity, double screen_size)
    {
        Display display = activity.getWindowManager().getDefaultDisplay();
        DisplayMetrics displayMetrics = new DisplayMetrics();
        display.getMetrics(displayMetrics);

        int width = displayMetrics.widthPixels / displayMetrics.densityDpi;
        int height = displayMetrics.heightPixels / displayMetrics.densityDpi;

        double screenDiagonal = Math.sqrt( width * width + height * height );
        return (screenDiagonal >= screen_size );
    }

什么?我将7.0作为输入参数,但它在我的Kindle Fire上返回false。 - IgorGanapolsky
很奇怪,因为我在我的设备上测试过它,它完美地工作。在return之前尝试记录screenDiagonal并查看它实际计算的结果。 - waqaslam
它返回6.708203932499369。因此,您必须考虑到这一点。 - IgorGanapolsky
@Waqas FYI:你在Asus Transformer Pad TF300上的方法返回对角线8.94(横屏)和8.60(竖屏)。有些不对劲。 - IgorGanapolsky
densityDPI不是一个准确的值,所以你不能这样使用它。例如,中等密度的手机通常会报告160dpi,即使它的物理dpi可能是其他值。你可以尝试使用xdpi和ydpi,但我发现这也不总是准确的,比如在一些三星设备上。对我来说,似乎没有很好的方法来确定屏幕的物理大小,这是荒谬的。 - SkolVikingsGuy

1

请查看支持多屏幕的文档。您可以遵循预定的文件夹命名结构,以便Android为不同的屏幕尺寸/密度加载不同的布局和可绘制项。

例如:

res/layout/my_layout.xml             // layout for normal screen size ("default")
res/layout-small/my_layout.xml       // layout for small screen size
res/layout-large/my_layout.xml       // layout for large screen size
res/layout-xlarge/my_layout.xml      // layout for extra large screen size
res/layout-xlarge-land/my_layout.xml // layout for extra large in landscape orientation

res/drawable-mdpi/my_icon.png        // bitmap for medium density
res/drawable-hdpi/my_icon.png        // bitmap for high density
res/drawable-xhdpi/my_icon.png       // bitmap for extra high density

对于蜂窝版本之前,这有点无用。 - Bostone

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接