2012-03-13 45 views
0

我正在开发一款支持多种不同屏幕尺寸的应用程序。我对平板电脑和手机有不同的设计。我在平板电脑中有一个列表片段和webfragment。我在手机中有一个列表片段。我的要求是,如果用户点击列表视图,如果它是平板电脑,我必须刷新数据,如果是电话,我必须去下一个活动。如何检查用户是否在Android中使用平板电脑或手机

有谁能告诉我该怎么做?

感谢

+0

http://stackoverflow.com/questions/5832368/tablet-or-phone-android – 2012-03-13 09:50:49

+0

一个简单的答案可以在这里找到: http://stackoverflow.com/a/9308284/1750829 – 2013-04-19 16:24:42

回答

0

那么你可以做这样的:

private boolean isTabletDevice() { 
if (android.os.Build.VERSION.SDK_INT >= 11) { // honeycomb 
    // test screen size, use reflection because isLayoutSizeAtLeast is only available since 11 
    Configuration con = getResources().getConfiguration(); 
    try { 
    Method mIsLayoutSizeAtLeast = con.getClass().getMethod("isLayoutSizeAtLeast", int.class); 
    Boolean r = (Boolean) mIsLayoutSizeAtLeast.invoke(con, 0x00000004); // Configuration.SCREENLAYOUT_SIZE_XLARGE 
    return r; 
    } catch (Exception x) { 
    x.printStackTrace(); 
    return false; 
    } 
} 
return false; 
} 

的想法只是为了检查API级别,但在未来的平板电脑和智能手机可以使用相同的Android版本(因为他们合并平板电脑版本与ICS开始的智能手机版本),所以这不是一个好主意。

下一个挑战是使代码向后兼容反射,因为低级别Android设备API级别< 9不支持检查屏幕分辨率所需的方法。

祝你好运, Arkde

1

与屏幕的尺寸只有我想:

private boolean isTablet() 
{ 
    Display display = 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 >= 9.0); 
} 
+0

它是否检查9英寸或以上? – waqaslam 2012-03-13 09:56:37

+0

是的,如果您的设备出现则返回true – 2012-03-13 13:25:02

+0

这对某些设备不起作用,这会返回不准确的densityDPI值。例如,有些设备在物理DPI差别很大时可能会报告160。 – SkolVikingsGuy 2012-07-23 21:02:33

1

在布局大,布局XLARGE和布局的布局文件中定义不同的ID。

RES /布局

<FrameLayout android:id="@+id/normal>...</FrameLayout> 

RES /布局大

<FrameLayout android:id="@+id/large>...</FrameLayout> 

使用ID来检测是否其平板电脑或手机(请勿平板电脑可以运行Android 2.2及电话可能运行4.0,所以这是检测的最佳方式)

+0

当你说使用id来检查它是哪一个,你的意思是检查一个特定的布局组件是否存在?比如:findViewById(R.id.fragment_container)== null; ? – fersarr 2014-02-16 18:20:23

相关问题