传送门:Google官方适配教程
吐槽
Android开发者真的挺苦逼的,不仅要适配常规分辨率,如 480x854、720x1280、1080x1920、1440x2560,还要适配各种奇葩分辨率,如 720x1440、1080x2160...
适配原因
不同分辨率和屏幕像素密度的手机,其宽高换算成dp后,有可能是不同的。如下表(Google规定:在160dpi的手机上,1dp = 1px):
注:dpi 跟 ppi 一个意思,都表示每英寸多少个像素点
分辨率(像素) | 像素密度(dpi) | 宽(dp) | 高(dp) |
---|---|---|---|
480x854 | 240 | 320 | 569.3 |
1080x1920 | 480 | 360 | 640 |
所以在1080x1920、480ppi的手机上,可以完整显示330dp宽的按钮,而在480x854、240ppi的手机上,却显示不下。如何解决呢?Google机智地设计了一套资源限定符,只需新建一个values-hdpi文件夹,再建一个dimens.xml(名字随意),添加一句:
<dimen name="your_widget_name">300dp</dimen>
按钮宽度便会自动调整为300dp。
限定符优先级
限定符 | 示例 | 含义 | 优先级 | since version |
---|---|---|---|---|
MCC 和 MNC | 示例: mcc310 mcc310-mnc004 mcc208-mnc00 ... |
移动国家代码 (MCC),(可选)后跟设备 SIM 卡中的移动网络代码 (MNC)。 例如,mcc310 是指美国的任一运营商,mcc310-mnc004 是指美国的 Verizon 公司,mcc208-mnc00 是指法国的 Orange 公司。 |
高 | API 1 |
语言和区域 | 示例: en fr en-rUS ... |
语言通过由两个字母组成的 ISO 639-1 语言代码定义,可以选择后跟两个字母组成的 ISO 3166-1-alpha-2 区域码(前带小写字母“r”)。 这些代码不区分大小写;r前缀用于区分区域码。不能单独指定区域。 |
↓ | API 1 |
布局 |