• android判断pad还是手机


    第一种。

    Rect frame = new Rect();
                    getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
                    if (frame.top == 0) {
                        //tablet 
                    } else {
                        //phone
                    }

    这种要在onCreate走完之后才可以获取。而且不适合设置全屏的项目。

    第二种。

    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);
    }

    这种除了个别厂商做得特别恶心的设备,都可以判断。

    第三种。

    File res/values/screen.xml (assuming res/layout/ contains your layout files for handsets)
    
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
      <string name="screen_type">phone</string>
    </resources>
    
    File res/values-sw600dp/screen.xml (assuming res/layout-sw600dp/ contains your layout files for small tablets like the Nexus 7)
    
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
      <string name="screen_type">7-inch-tablet</string>
    </resources>
    
    File res/values-sw720dp/screen.xml (assuming res/layout-sw720dp/ contains your layout files for large tablets like the Nexus 10):
    
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
      <string name="screen_type">10-inch-tablet</string>
    </resources>
    

    简单解释下:在res不同的values下创建不同的screen.xml,这样在不同的设备上取出的String值就不同了,这种比较好用,除了三星某超大屏机器。。。

    第四种。

    /**
     * Checks if the device is a tablet or a phone
     * 
     * @param activityContext
     *            The Activity Context.
     * @return Returns true if the device is a Tablet
     */
    public static boolean isTabletDevice(Context activityContext) {
        // Verifies if the Generalized Size of the device is XLARGE to be
        // considered a Tablet
        boolean xlarge = ((activityContext.getResources().getConfiguration().screenLayout & 
                            Configuration.SCREENLAYOUT_SIZE_MASK) == 
                            Configuration.SCREENLAYOUT_SIZE_XLARGE);
    
        // If XLarge, checks if the Generalized Density is at least MDPI
        // (160dpi)
        if (xlarge) {
            DisplayMetrics metrics = new DisplayMetrics();
            Activity activity = (Activity) activityContext;
            activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
    
            // MDPI=160, DEFAULT=160, DENSITY_HIGH=240, DENSITY_MEDIUM=160,
            // DENSITY_TV=213, DENSITY_XHIGH=320
            if (metrics.densityDpi == DisplayMetrics.DENSITY_DEFAULT
                    || metrics.densityDpi == DisplayMetrics.DENSITY_HIGH
                    || metrics.densityDpi == DisplayMetrics.DENSITY_MEDIUM
                    || metrics.densityDpi == DisplayMetrics.DENSITY_TV
                    || metrics.densityDpi == DisplayMetrics.DENSITY_XHIGH) {
    
                // Yes, this is a tablet!
                return true;
            }
        }
    
        // No, this is not a tablet!
        return false;
    }

    和第二种类似,通过屏幕分辨率和像素密度,(貌似)判断的更细一些。。。。

    第五种。

    TelephonyManager manager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
            if(manager.getPhoneType() == TelephonyManager.PHONE_TYPE_NONE){
                return "Tablet";
            }else{
                return "Mobile";
            }

    这种除了某些pad可以打电话的(貌似不少),都可以。。。

    大概这几个比较可行,没有太好的方案暂时,求讨论求指导。。。。

  • 相关阅读:
    Java三年经验
    系统集成项目管理 - 笔记
    ZK
    older versions of the JRE and JDK
    [提高组集训2021] 古老的序列问题
    CF1556G Gates to Another World
    Codeforces Round #743 (Div. 1)
    [提高组集训2021] 蚂蚁
    [LOJ 6669] Nauuo and Binary Tree
    [ABC219H] Candles
  • 原文地址:https://www.cnblogs.com/xirtam/p/3410402.html
Copyright © 2020-2023  润新知