本文翻译自:How to determine device screen size category (small, normal, large, xlarge) using code?

Is there any way to determine the category of screen size of the current device, such as small, normal, large, xlarge? 有没有办法确定当前设备的屏幕尺寸类别,如小,普通,大,xlarge?

Not the density, but the screen size. 不是密度,而是屏幕尺寸。


#1楼

参考:https://stackoom.com/question/L2ec/如何使用代码确定设备屏幕大小类别-小-普通-大-xlarge


#2楼

Thanks for the answers above, that helped me a lot :-) But for those (like me) forced to still support Android 1.5 we can use java reflection for backward compatible: 感谢上面的答案,这对我帮助很大:-)但是对于那些(像我一样)被迫仍支持Android 1.5的人,我们可以使用java反射来向后兼容:

Configuration conf = getResources().getConfiguration();
int screenLayout = 1; // application default behavior
try {Field field = conf.getClass().getDeclaredField("screenLayout");screenLayout = field.getInt(conf);
} catch (Exception e) {// NoSuchFieldException or related stuff
}
// Configuration.SCREENLAYOUT_SIZE_MASK == 15
int screenType = screenLayout & 15;
// Configuration.SCREENLAYOUT_SIZE_SMALL == 1
// Configuration.SCREENLAYOUT_SIZE_NORMAL == 2
// Configuration.SCREENLAYOUT_SIZE_LARGE == 3
// Configuration.SCREENLAYOUT_SIZE_XLARGE == 4
if (screenType == 1) {...
} else if (screenType == 2) {...
} else if (screenType == 3) {...
} else if (screenType == 4) {...
} else { // undefined...
}

#3楼

Jeff Gilfelt's answer as a static helper method: Jeff Gilfelt作为静态辅助方法的答案:

private static String getSizeName(Context context) {int screenLayout = context.getResources().getConfiguration().screenLayout;screenLayout &= Configuration.SCREENLAYOUT_SIZE_MASK;switch (screenLayout) {case Configuration.SCREENLAYOUT_SIZE_SMALL:return "small";case Configuration.SCREENLAYOUT_SIZE_NORMAL:return "normal";case Configuration.SCREENLAYOUT_SIZE_LARGE:return "large";case 4: // Configuration.SCREENLAYOUT_SIZE_XLARGE is API >= 9return "xlarge";default:return "undefined";}
}

#4楼

Couldn't you do this using a string resource and enums? 难道你不能使用字符串资源和枚举吗? You can define a string resource that had the name of the screen size, such as SMALL, MEDIUM, or LARGE. 您可以定义具有屏幕大小名称的字符串资源,例如SMALL,MEDIUM或LARGE。 Then you could use the value of the string resource to create an instance of the enum. 然后,您可以使用字符串资源的值来创建枚举的实例。

  1. Define an Enum in your code for the different screen sizes you care about. 在代码中为您关注的不同屏幕尺寸定义一个枚举。

     public Enum ScreenSize { SMALL, MEDIUM, LARGE,; } 
  2. Define a string resource, say screensize, whose value will be either SMALL, MEDIUM, or LARGE. 定义一个字符串资源,比如screensize,其值可以是SMALL,MEDIUM或LARGE。

     <string name="screensize">MEDIUM</string> 
  3. Put a copy of screensize in a string resource in each dimension you care about. screensize的副本放在您关注的每个维度的字符串资源中。
    For example, <string name="screensize">MEDIUM</string> would go in values-sw600dp/strings.xml and values-medium/strings.xml and <string name="screensize">LARGE</string> would go in sw720dp/strings.xml and values-large/strings.xml. 例如, <string name="screensize">MEDIUM</string>将输入值-sw600dp / strings.xml和values-medium / strings.xml和<string name="screensize">LARGE</string>在sw720dp / strings.xml和values-large / strings.xml中。
  4. In code, write 在代码中,写
    ScreenSize size = ScreenSize.valueOf(getReources().getString(R.string.screensize);

#5楼

private String getDeviceDensity() {int density = mContext.getResources().getDisplayMetrics().densityDpi;switch (density){case DisplayMetrics.DENSITY_MEDIUM:return "MDPI";case DisplayMetrics.DENSITY_HIGH:return "HDPI";case DisplayMetrics.DENSITY_LOW:return "LDPI";case DisplayMetrics.DENSITY_XHIGH:return "XHDPI";case DisplayMetrics.DENSITY_TV:return "TV";case DisplayMetrics.DENSITY_XXHIGH:return "XXHDPI";case DisplayMetrics.DENSITY_XXXHIGH:return "XXXHDPI";default:return "Unknown";}
}

#6楼

Need to check for xlarge screens & x..high densities? 需要检查xlarge屏幕和x..high密度? This is the altered code from the chosen answer. 这是所选答案的改变代码。

//Determine screen size
if ((getResources().getConfiguration().screenLayout &      Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_LARGE) {     Toast.makeText(this, "Large screen",Toast.LENGTH_LONG).show();
} else if ((getResources().getConfiguration().screenLayout &      Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_NORMAL) {     Toast.makeText(this, "Normal sized screen" , Toast.LENGTH_LONG).show();
} else if ((getResources().getConfiguration().screenLayout &      Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_SMALL) {     Toast.makeText(this, "Small sized screen" , Toast.LENGTH_LONG).show();
} else if ((getResources().getConfiguration().screenLayout &      Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_XLARGE) {     Toast.makeText(this, "XLarge sized screen" , Toast.LENGTH_LONG).show();
} else {Toast.makeText(this, "Screen size is neither large, normal or small" , Toast.LENGTH_LONG).show();
}//Determine density
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int density = metrics.densityDpi;if (density==DisplayMetrics.DENSITY_HIGH) {Toast.makeText(this, "DENSITY_HIGH... Density is " + String.valueOf(density),  Toast.LENGTH_LONG).show();
} else if (density==DisplayMetrics.DENSITY_MEDIUM) {Toast.makeText(this, "DENSITY_MEDIUM... Density is " + String.valueOf(density),  Toast.LENGTH_LONG).show();
} else if (density==DisplayMetrics.DENSITY_LOW) {Toast.makeText(this, "DENSITY_LOW... Density is " + String.valueOf(density),  Toast.LENGTH_LONG).show();
} else if (density==DisplayMetrics.DENSITY_XHIGH) {Toast.makeText(this, "DENSITY_XHIGH... Density is " + String.valueOf(density),  Toast.LENGTH_LONG).show();
} else if (density==DisplayMetrics.DENSITY_XXHIGH) {Toast.makeText(this, "DENSITY_XXHIGH... Density is " + String.valueOf(density),  Toast.LENGTH_LONG).show();
} else if (density==DisplayMetrics.DENSITY_XXXHIGH) {Toast.makeText(this, "DENSITY_XXXHIGH... Density is " + String.valueOf(density),  Toast.LENGTH_LONG).show();
} else {Toast.makeText(this, "Density is neither HIGH, MEDIUM OR LOW.  Density is " + String.valueOf(density),  Toast.LENGTH_LONG).show();
}

如何使用代码确定设备屏幕大小类别(小,普通,大,xlarge)?相关推荐

  1. Xamarin.Forms获取设备屏幕大小

    Xamarin.Forms获取设备屏幕大小 可以借助device.Display获取.基本形式如下: var display = device.Display; 然后就可以获取屏幕大小. displa ...

  2. flutter 获取设备屏幕大小

    import 'dart:ui'; var s = window.physicalSize;print(s); 转载于:https://www.cnblogs.com/pythonClub/p/105 ...

  3. html5适应手机比例,HTML5 如何让手机网站自适应设备屏幕宽度

    手机或平板设备屏幕大小差距大,因此打开网页时宽度也不同,新做的手机网站如何能够自适应网页宽度,就有了一些难度,还好程序猿们想到了这一点,在代码里面做了如此设置,下面简单讲解一下. 方法:在网页头部加上 ...

  4. 调整虚拟机屏幕大小(全屏)

    首先解决一个问题:配置虚拟机,发现屏幕大小太小  需要安装vmware tools ,屏幕就会自适应  但是安装vmware tools 的按钮是灰的,所以我首先就是安装它      原文地址:htt ...

  5. 移动设备应用程序中支持多个屏幕大小和 DPI 值

    支持多个屏幕大小和 DPI 值的指导原则 要部署独立于平台的应用程序,应了解不同的输出设备.设备可以具有不同的屏幕大小或分辨率以及不同的 DPI 值或密度. Flex 工程师 Jason SJ 在他的 ...

  6. html自动适应屏幕代码,html根据手机屏幕大小做自适应

    html根据手机屏幕大小做自适应 弹框宽高自适应,核心代码 var isMobile = { Android: function () { return navigator.userAgent.mat ...

  7. html 自动适应手机屏幕大小,网页宽度自动适应手机屏幕宽度的实现代码(viewport)...

    原标题:网页宽度自动适应手机屏幕宽度的实现代码(viewport) 一般的写法如下: XML/HTML Code复制内容到剪贴板 较多的写法: XML/HTML Code复制内容到剪贴板 1. 在网页 ...

  8. html怎么设置页面自适应屏幕大小,网页设计设置页面自适应屏幕宽度

    方法: 1.在网页头部加上这样一条meta标签: 解释: width=device-width :宽度等于设备屏幕的宽度 initial-scale=1.0:表示:初始的缩放比例 minimum-sc ...

  9. Android图片适应屏幕大小

    1.drawable-(hdpi,mdpi,ldpi)的区别 dpi是"dot per inch"的缩写,每英寸像素数. 四种密度分类: ldpi (low), mdpi (med ...

最新文章

  1. 用vue-cli脚手架搭建一个仿网易云音乐的全家桶vue项目
  2. linux c 笔记 文件(三)
  3. tinyxml语法讲解之写xml
  4. 学习Pygame和巩固Python——画颜色~
  5. 如何从命令行浏览和连接到无线网络
  6. kettle中过滤记录中时间_Kettle中Step:Text file outpout功能
  7. 计算机中的字,双字以及存储
  8. Milking Grid poj2185
  9. 苹果企业账号炒作到多少钱_从炒作到行动:边缘计算的后续步骤
  10. 【Java】Java SimpleDateFormat 线程安全 问题
  11. 大数据分析系统包含哪些功能板块
  12. 因为在此系统上禁止运行脚本。有关详细信息_win10系统下Hyper-V基本(网上资源整合)3
  13. AcWing 4243. 传递信息(单源最短路)
  14. 澳大利亚通信软件服务公司 Whispir 完成1175万美元 A 轮融资
  15. 驱动人生后门清除方案
  16. Wap模拟器,用电脑浏览器浏览手机wap网站
  17. android 拼音搜索汉字,android开发之使用拼音搜索汉字
  18. 《成都》钢琴谱,带指法和歌词
  19. 微信打不开链接怎么办,微信跳转外部浏览器打开
  20. 数据结构与算法题目集7-32——哥尼斯堡的“七桥问题”

热门文章

  1. ASP.NET控件Web CAD SDK发布v12版本,支持DWG 2018丨附下载
  2. 《R语言数据挖掘:实用项目解析》——1.9 循环原理——repeat循环
  3. MVVM MVC MVP
  4. JAVA时间操作类常用方法汇总
  5. 给商品评分效果,CSS技巧
  6. asp.net core3.0 mvc 用 autofac
  7. Jmeter命令行执行并生成HTML报告
  8. MM物料移动BW数据源介绍
  9. 20145326蔡馨熤《计算机病毒》——静态分析(2)
  10. Python 如何在csv中定位非数字和字母的符号