如何在Android中以编程方式查找平板电脑或手机?

VIG*_*ESH 25 android android-layout

我的情况是手机和平板电脑的逻辑是相同的.但布局略有不同.我尝试使用以下代码

public static boolean findoutDeviceType(Context context) 
    {
        return (context.getResources().getConfiguration().screenLayout & 
                       Configuration.SCREENLAYOUT_SIZE_MASK)>= 
                           Configuration.SCREENLAYOUT_SIZE_LARGE;
    }
Run Code Online (Sandbox Code Playgroud)

三星Tab 10"的分辨率为1280*800,S3的分辨率为1270*720.此代码返回Tab和Phone的尺寸为XLarge,因为它的检查标准是> 960*720.

我已经测试了在Res作为布局,布局大和布局-xLarge的布局文件夹中插入相应的UI.但这无论如何都没有影响.检查时从Layout文件夹中获取了UI.

无论如何,即使我将UI放在不同的布局文件夹中,我也必须在类文件中检查它们以设置相应的ContentView.

有没有其他方法可以找到它?

edw*_*win 48

Android培训中讨论了此主题:

http://developer.android.com/training/multiscreen/screensizes.html#TaskUseSWQuali

如果您阅读整个主题,他们将解释如何在特定值文件中设置布尔值(如res/values-sw600dp/):

<resources>
    <bool name="isTablet">true</bool>
</resources>
Run Code Online (Sandbox Code Playgroud)

因为sw600dp限定符仅对android 3.2以上的平台有效.如果要确保此技术适用于所有平台(3.2之前),请在res/values-xlarge文件夹中创建相同的文件:

<resources>
    <bool name="isTablet">true</bool>
</resources>
Run Code Online (Sandbox Code Playgroud)

然后,在"标准"值文件(as res/values/)中,将布尔值设置为false:

<resources>
    <bool name="isTablet">false</bool>
</resources>
Run Code Online (Sandbox Code Playgroud)

然后在您的活动中,您可以获取此值并检查您是否在平板电脑尺寸设备中运行:

boolean tabletSize = getResources().getBoolean(R.bool.isTablet);
Run Code Online (Sandbox Code Playgroud)

这不是我的逻辑,Credit转向ol_v_er这个简单易行的方法.我只是复制了它.

你可以在 这里查看原始答案

一些额外的信息

您现在已标记指示您的应用程序是在手机还是平板电脑上运行.

我创建了两个包来处理UI及其功能,

com.phone
com.tablet
Run Code Online (Sandbox Code Playgroud)

并将控件重定向到所需的包

boolean tabletSize = getResources().getBoolean(R.bool.isTablet);
if (tabletSize) {
    // do something
    //Start activity for tablet
} else {
    // do something else
    //Start activity for phone     
}
Run Code Online (Sandbox Code Playgroud)

参考

注意:我认为10英寸和7英寸的屏幕应用程序都需要资源res/values-sw600dp/.但更具体一点,我认为我们可以使用10英寸平板电脑屏幕res/values-sw720dp/

<resources>
    <bool name="isTablet">true</bool>
</resources>
Run Code Online (Sandbox Code Playgroud)

  • 您应该在复制粘贴时引用您的来源:http://stackoverflow.com/a/9308284 (3认同)

use*_*904 16

试试这个

    public boolean isTablet(Context context) {
        boolean xlarge = ((context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == 4);
        boolean large = ((context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_LARGE);
        return (xlarge || large);
    }
Run Code Online (Sandbox Code Playgroud)

如果您使用平板电脑,它将返回true.已经在三星Galaxy Tab 7"和三星Galaxy S3上进行了检查.

  • 检查两个设备_IS NOT_一个足够好的检查.要非常小心这种方法,因为它不可靠. (8认同)
  • 以设备尺寸为基础来确定设备是最糟糕的想法。我不知道为什么这是正确答案。 (2认同)

归档时间:

查看次数:

23880 次

最近记录:

6 年,7 月 前