- 可以看见换算办法异常简单,而DisplayMetrics的所有属性都是public的,不消反射就能修改;
- 而这个DisplayMetrics大年夜哪来?大年夜源码中可以看出一般为mContext.getResources().getDisplayMetrics(),这个mContext即为地点Activity;
- Activity中所拿到的DisplayMetrics与Application中拿到的DisplayMetrics固然不是一个实例,然则所稀有值都雷同,在Application中进行更改也会影响到所有Activity中;
- 反正屏切换等Configuration的变更会导致DisplayMetrics的从新计算还原,须要从新处理;
- px,dp与sp都是日常平凡常用的单位,而pt,in与mm几乎没有看见过,大年夜这些不常见的单位下手正好可以不影响其他常用的单位;
- pt的原意是长度单位磅,根据当前屏幕与设计图尺寸将metrics.xdpi进行修改就可以实现将pt这个单位重定义成我们所须要的相对长度单位,使修改之后计算出的1pt实际对应的px/屏幕宽度px=1px/设计图宽度px。
基于以上几点,遍有了以下筹划。
三、筹划
适配的目标是:完全按照设计图上标注的尺寸来编写页面,所编写的页面在所有大年夜小与分辨率的屏幕上都表示一致,即控件在所有屏幕上相对于全部屏幕的相对大年夜小都一致(看起来只是将设计图缩放至屏幕大年夜小)。
- 核心。应用冷门的pt作为长度单位。
- 绘制。编写xml时完全对比设计稿上的尺寸来编写,只不过单位换为pt。 如不雅须要在代码中动态转换成px的话,应用TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PT, value, metrics)。
- 预览。及时预览时绘制页面是很重要的一个环节。以1334×750的设计图为例,为了实现于正常绘制时一样的预览功能,创建一个长为1334磅,宽为750磅的设备作为预览,经换算约为21.5英寸((sqrt(1334^2+750^2))/72)。预览时选择这个设备即可。
- public class MyApplication extends Application{
- public final static float DESIGN_WIDTH = 750; //绘制页面时参照的设计图宽度
- @Override
- public void onCreate() {
- super.onCreate();
- resetDensity();
- }
- @Override
推荐阅读
I2C总线被全球跨越50个公司的1000+个ICs所应用,已然是一个世界标准.别的,I2C总线与多种不合的┞菲握总线是兼容的,比如SMBus(体系治理总线),PMBus(电源治理总线),IPMI(智能平台治理总线),D>>>详细阅读
地址:http://www.17bianji.com/lsqh/36666.html
1/2 1