1.sw的值是怎么计算得来的
sw = width * DisplayMetrics.DENSITY_DEFAULT / densityDPI
width是指屏幕的宽度
DisplayMetrics.DENSITY_DEFAULT是指google的标准值,一般是160
densityDPI是指屏幕密度(每寸像素数)
计算方法如下:
DisplayMetrics dm = new DisplayMetrics();
dm = getResources().getDisplayMetrics();
float density = dm.density; // 屏幕密度(像素比例:0.75/1.0/1.5/2.0)
int densityDPI = dm.densityDpi; // 屏幕密度(每寸像素:120/160/240/320)
float xdpi = dm.xdpi;
float ydpi = dm.ydpi;
int screenWidth = dm.widthPixels; // 屏幕宽(像素,如:480px)
int screenHeight = dm.heightPixels;
2.sw的值是如何适配的
sw是指smallest width,就是说最小限度,如你的手机sw计算结果是320,你的资源配置有drawable-sw320dp,drawable-sw600dp,drawable-sw720dp,那么将适配到drawable-sw320dp;如果你的手机sw计算是640,那么将适配到drawable-sw600dp
下面列出可用的资源值修饰符:
1.Mobile Country Code(MCC 移动国家编码) 和 Mobile Newwork Code(MNC 移动网络编码)
国家和可选择的网络取决于你当前所使用的SIM卡,MCC:mcc+3个代表国家的数字编码,MNC:mnc+2个代表网络的数字编码,举个例子:mcc234-mnc20,你可以找到这些编码在http://en.wikipedia.org/wiki/MobileNetworkCode.
2.语言和区域
语言根据ISO 639-1 指定2个小写字母作为代表,紧接着可选择的区域先以r开头(region)然后根据ISO 3166-1-alpha-2 语言编码,也是2个字母不过是大写,还是举个例子吧:
en(英语),en-rUS(美国英语),en-rGB(GB不知道是哪个国家~。~,大家可以去查找通过维基百科)
3.最小的屏幕宽度
以sw<Dimention value>dp的格式(比如sw600dp,sw320dp…)来指定最小的设备尺寸(宽和高)。那为什么说是最小屏幕宽度?考虑到横竖屏,实质就是宽高的较小值。
用在提供多个布局,安卓选择最接近但是不超过当前屏幕尺寸。
4.有效的屏幕宽度
以w<Dimention value>dp 来表示最小的设备屏幕宽度,比如:w600dp,w320dp,w720dp等,同样也是为了支持多个布局选择,不同于最小的屏幕宽度,有效的屏幕宽度
它跟当前的屏幕宽度做对比(比如当前是横屏的屏幕宽度),安卓选择最接近但是不超过当前屏幕尺寸。
5.有效的屏幕高度
与有效的屏幕宽度类似,表示方法以h<Dimension value>dp.
6.屏幕尺寸
实用大致对照表:
屏幕 宽度 高度 尺寸 大小 密度
Type (Pixels) (Pixels) Range (inches) Size Group
QVGA 240 320 2.6 - 3.0 Small Low
WQVGA 240 400 3.2 - 3.5 normal Low
FWQVGA 240 432 3.5 - 3.8 normal Low
HVGA 320 480 3.0 - 3.5 normal Medium
WVGA 480 800 3.3 - 4.0 normal High
FWVGA 480 854 3.5 - 4.0 normal High
WVGA 480 800 4.8 - 5.5 large Medium
FWVGA 480 854 5.0 - 5.8 large Medium
大约 2~3 inch 为 small, 3~4 inch 为normal,4~6inch 为large, 大于6为xlarge
因为每个屏幕类型都有不同的尺寸(比如QVGA可能有2~3个尺寸),在平板电脑里更常见,比较好的方式是用前面提到的最小的屏幕宽度和有效的屏幕宽度(高度)来更精确的指定,安卓在检测layout的修饰符,会优先考虑后者。
7.屏幕的方向
port(portrait)、land(landscape)、square(square)
8.Dock Mode 所谓的底座模式?
car(行车模式)、desk (断开底座)
9.Night Mode
这个用来指定是否是夜间模式,night或者notnight,以此我们可以修改一个theme或者color theme来达到效果
10.屏幕像素密度(dpi)
最佳实践方式:给ldpi(120dpi),mdpi(160dpi),hdpi(240dpi),xhdpi(320dpi) 都指定对应的图片资源。
然而你也可以指定nodpi表示不去适配dpi。同样安卓也是选择最接近当前设备dpi的Drawables文件夹。
11.触屏类型
notouch、stylus、finger
12.键盘有效性
One of keysexposed, keyshidden, or keyssoft.
13.键盘输入类型
One of nokeys, qwerty, or 12key.
14.导航键有效性
One of navexposed or navhidden.
15.UI导航类型
nonav,dpad,trackball,wheel
16.平台版本
target API Level, 以v<API level> 比如v7. 用来限制资源只能跑在指定API或者更高的设备上。
你可以为任何资源指定多个修饰符,然后以- 分开,任何混合写法都是支持的,但是只能是上面列出的修饰符,还有一点就是每种修饰符只能出现1次。
分享到:
相关推荐
在Android开发中,"android缓冲解析"是一种优化用户体验的技术,主要应用于处理网络资源,特别是图片加载,以确保页面能够快速地展示,同时不影响后续的图片加载。这种技术的核心是利用缓存机制,先显示本地数据或者...
Android系统的资源访问机制是构建和管理应用程序资源的重要组成部分,它确保了应用程序的布局、样式、图片、字符串等资源可以被有效管理和访问。本部分内容将详细探讨Android系统资源访问机制,包括资源的概念、资源...
本资源提供的"Android 闹钟app 源码"是一个适用于Android 8到11版本的源代码,非常适合学习和实践Android应用开发。以下是基于该源码可能涉及的主要知识点的详细解析: 1. **AlarmManager**: Android中的...
本文将深入解析Android Notification的工作原理、设计模式以及如何创建一个完整的Demo。 一、Notification概述 Notification是Android系统提供的一种通知用户的应用程序事件的方式,它可以在状态栏中显示图标、文字...
7. **折叠屏设备支持**:随着折叠屏设备的出现,Android 11为这类设备提供了更好的适配和支持,确保应用在不同屏幕尺寸间平滑切换。 8. **通知流优化**:Android 11的的通知系统进行了改进,将对话通知单独分类,使...
在Android Studio 3.0及以后版本,`build.gradle`文件中`dependencies`块的`google()`和`jcenter()`仓库的顺序可能会影响依赖的解析。通常,将`google()`放在`jcenter()`之前可以确保优先从Google的Maven仓库下载...
同时,也会涉及如何适配不同Android版本,确保应用的兼容性和稳定性。 除此之外,本书还会涵盖以下几个重要主题: - **系统启动流程**:介绍Android系统的启动过程,包括Zygote进程的创建、System Server的初始化...
Android的通知系统也得到了详尽的解释,包括如何创建通知,设置通知优先级,以及利用Notification Channels实现Oreo及以上版本的兼容性。 最后,笔记还涵盖了Android的权限管理,特别是针对Android 6.0及以上版本的...
**Android Volley 框架完全解析** Android Volley 是 Google 推出的一款强大的网络请求库,专为 Android 应用设计,旨在提供轻量级、高效、快速的网络通信方案。Volley 主要针对 JSON 类型的数据进行优化,适用于...
- 多屏幕适配:掌握dp、sp单位,以及使用dimen资源进行不同分辨率屏幕的适配。 4. **数据存储** - SharedPreferences:用于保存轻量级配置信息。 - SQLite数据库:学习创建、查询、更新和删除数据的基本操作。 ...
这可能通过自定义的解析器和计算类实现,处理加减乘除、括号、优先级等运算规则。如果计算器具有编程功能,可能还需要支持变量、函数等高级特性。 6. **Java/Kotlin语言**:Android应用主要用Java或Kotlin编写。...
- **运算符优先级**:理解并正确处理乘除先于加减的运算规则,以及括号内的运算优先级。 - **错误处理**:考虑无效输入,如连续的运算符、未闭合的括号等,需要有恰当的错误处理机制。 5. **资源管理**: 图标、...
最后,考虑到Android设备的多样性,适配不同屏幕尺寸和分辨率的UI设计也是挑战之一。使用布局权重、可折叠布局(如CollapsingToolbarLayout)和响应式设计(如PercentRelativeLayout或ConstraintLayout)是实现这一...
在实际操作中,我们还可以利用Android Library的资源映射机制,让外壳项目中的资源优先级高于库项目,从而实现资源的差异化。例如,库项目中定义了一个默认的背景颜色,而在外壳项目中,我们可以提供一个同名但颜色...
本文将基于“Android 9.0开发手册—官方更新”这一核心资料,深入剖析其在功能特性、开发指南及适配策略等方面的关键知识点。 #### 二、新功能特性介绍 1. **自适应电池(Adaptive Battery)** - 通过机器学习技术...
在Android API 26及以上版本,通知被分为多个优先级,例如`PRIORITY_MIN`, `PRIORITY_DEFAULT`, `PRIORITY_HIGH`, 和 `PRIORITY_MAX`。常驻通知通常需要设置为至少`PRIORITY_DEFAULT`,因为更低的优先级可能会导致...
安卓巴士推荐的Android开发书籍是一份宝贵的资源,旨在帮助开发者提升技能,了解最新的开发技术和最佳实践。以下是一些核心的知识点,涵盖Android开发的各个方面: 1. **基础概念与环境搭建**: - Android SDK:...
2. 运算逻辑:在解析出表达式后,计算器运用运算优先级规则进行计算。例如,先处理括号内的运算,再处理乘除,最后处理加减。对于浮点数运算,需要考虑到浮点误差问题,确保结果尽可能精确。 三、用户界面 一个...
以下是一些重要的Android面试题及相关的知识点解析,帮助你准备面试,提升专业能力。 1. **Activity生命周期**:了解Activity的创建、运行、暂停、恢复和销毁等状态,以及在不同状态间的转换方法。例如,onCreate()...
Java Mail for Android 是一个专为Android平台设计的邮件处理库,它使得在Android应用中实现邮件发送和接收变得更加便捷。这个库包含三个重要的JAR文件:mail.jar、activation.jar和additionnal.jar,它们各自承载了...