1.新手Android中px=dp*(dpi/160)的解释
2.-60.0dip代ç ä¸ç-代表ä»ä¹
3.软件设计原则
4.Androidä¸dipï¼dpï¼spï¼ptåpxçåºå«è¯¦è§£
新手Android中px=dp*(dpi/160)的解释
在dpi的手机上1px=1dp,这句话的以上是说 ,手机屏幕宽带被分割成了块,每一块有一个像素点,每一块就是一个dp。 那么1dp=1px而dpi的手机上,分辨率是将魂师源码上一个手机的两倍,手机屏幕宽带也被分割成了块,每一块有两个像素点,每一块也是一个dp,那么1dp=2px
上面分析来自于android学习手册,手机助手中可以下载,里面有个android例子,源码文档都可在里面看,保罗量化指标源码下面是截图
下面是dp与px的转换公式,也来自android学习手册,经常使用。
import android.content.Context;
public class DensityUtil {
/**
* 根据手机的分辨率从 dp 的单位 转成为 px(像素)
*/
public static int dip2px(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
/**
* 根据手机的分辨率从 px(像素) 的单位 转成为 dp
*/
public static int px2dip(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}
}
-.0dip代ç ä¸ç-代表ä»ä¹
marginBottom æ£å¼æ¯ å¢å¤§ ä¸ä¸é¢ç©ºé´çè·ç¦»ï¼è´å¼ä¸ºåå°è·ç¦» ä¹å°±é£ææï¼å»ºè®®çæºç ãæ¯å¦ä½ ç设å¤å辨çæ¯x,éé¢æ¾ä¸ªTextView marginTopæ¯-dipï¼é£ä¹ä½ çtextViewå°±ä¼æ¾ç¤º
软件设计原则
软件设计七大原则概述:
软件设计包含两大一般性原则:YAGNI(你不会需要它)和两个核心原则:开闭原则(Open Close Principle, OCP)和依赖倒置原则(Dependence Inversion Principle, DIP)。
开闭原则(OCP)强调模块的扩展开放,修改封闭。简易api接口源码它包含两个关键特性:模块的行为可扩展以满足需求,源代码不可修改。通过避免修改现有代码,OCP确保了系统的稳定性和复用性。改进设计引入了动态变化,例如价格策略的stream源码精讲处理,通过引入关联类(PricePolicy)实现。
依赖倒置原则(DIP)主张依赖抽象而非具体实现,确保了系统的稳定性和可维护性。这类似于物理中的稳定系统,其中基础的稳定性决定了整体的稳定性。
单一职责原则(SRP)强调一个类只能有一个职责。五五复制系统源码通过将Modem设计拆分为Connnection和DataChannel,避免了类中多个职责的复杂性,提高了系统可维护性。
接口隔离原则(ISP)强调使用接口继承而非实现继承,通过接口只暴露必要操作,隐藏不相关操作。这样,客户端只需关注其需要的部分,提高了系统的灵活性和可维护性。
迪米特法则(LoD)强调对象间最少的了解,减少类间的耦合。通过限制成员朋友类的了解,实现了低耦合的设计。
里氏替换原则(LSP)确保子类可以替换父类,且程序行为不变。这要求子类遵循父类的前置和后置条件,避免添加额外限制,保证了继承的合理性。
CARP(Composite/Aggregate Reuse Principle)强调使用合成/聚合实现对象间的重用,避免多重继承带来的问题。通过聚合和组合,实现对象间的独立性,降低了类间的耦合度。
遵循这些原则,可以构建灵活、可扩展和易于维护的软件系统,提高代码质量,减少错误和复杂性。
Androidä¸dipï¼dpï¼spï¼ptåpxçåºå«è¯¦è§£
è¿å»ï¼ç¨åºåé常以åç´ ä¸ºåä½è®¾è®¡è®¡ç®æºç¨æ·çé¢ãä¾å¦ï¼å¾ç大å°ä¸ºÃåç´ ãè¿æ ·å¤ççé®é¢å¨äºï¼å¦æå¨ä¸ä¸ªæ¯è±å¯¸ç¹æ°ï¼dpiï¼æ´é«çæ°æ¾ç¤ºå¨ä¸è¿è¡è¯¥ç¨åºï¼åç¨æ·çé¢ä¼æ¾å¾å¾å°ãå¨æäºæ åµä¸ï¼ç¨æ·çé¢å¯è½ä¼å°å°é¾ä»¥çæ¸ å 容ãç±æ¤æ们éç¨ä¸å辨çæ å ³ç度éåä½æ¥å¼åç¨åºå°±è½å¤è§£å³è¿ä¸ªé®é¢ãAndroidåºç¨å¼åæ¯æä¸åç度éåä½ã
度éåä½å«ä¹
dip: device independent pixels(设å¤ç¬ç«åç´ ). ä¸å设å¤æä¸åçæ¾ç¤ºææ,è¿ä¸ªå设å¤ç¡¬ä»¶æå ³ï¼ä¸è¬æ们为äºæ¯æWVGAãHVGAåQVGA æ¨è使ç¨è¿ä¸ªï¼ä¸ä¾èµåç´ ã
dp: dipæ¯ä¸æ ·ç
px: pixels(åç´ ). ä¸å设å¤æ¾ç¤ºææç¸åï¼ä¸è¬æ们HVGA代表xåç´ ï¼è¿ä¸ªç¨çæ¯è¾å¤ã
pt: pointï¼æ¯ä¸ä¸ªæ åçé¿åº¦åä½ï¼1ptï¼1/è±å¯¸ï¼ç¨äºå°å·ä¸ï¼é常ç®åæç¨ï¼
sp: scaled pixels(æ¾å¤§åç´ ). 主è¦ç¨äºåä½æ¾ç¤ºbest for textsizeã
inï¼è±å¯¸ï¼ï¼é¿åº¦åä½ã
mmï¼æ¯«ç±³ï¼ï¼é¿åº¦åä½ã
度éåä½çæ¢ç®å ¬å¼
å¨androidæºç å TypedValue.javaä¸ï¼æ们çå¦ä¸å½æ°ï¼
代ç å¦ä¸:
public static float applyDimension(int unit, float value,
DisplayMetrics metrics)
{
switch (unit) {
case COMPLEX_UNIT_PX:
return value;
case COMPLEX_UNIT_DIP:
return value * metrics.density;
case COMPLEX_UNIT_SP:
return value * metrics.scaledDensity;
case COMPLEX_UNIT_PT:
return value * metrics.xdpi * (1.0f/);
case COMPLEX_UNIT_IN:
return value * metrics.xdpi;
case COMPLEX_UNIT_MM:
return value * metrics.xdpi * (1.0f/.4f);
}
return 0;
}
该å½æ°åè½ï¼æ¯æååä½æ¢ç®ä¸ºåç´ ã
metrics.densityï¼é»è®¤å¼ä¸ºDENSITY_DEVICE / (float) DENSITY_DEFAULT;
metrics.scaledDensityï¼é»è®¤å¼ä¸ºDENSITY_DEVICE / (float) DENSITY_DEFAULT;
metrics.xdpiï¼é»è®¤å¼ä¸ºDENSITY_DEVICE;
DENSITY_DEVICEï¼ä¸ºå±å¹å¯åº¦
DENSITY_DEFAULTï¼é»è®¤å¼ä¸º
å±å¹å¯åº¦ï¼è¡¨ç¤ºæ¯è±å¯¸æå¤å°ä¸ªæ¾ç¤ºç¹ï¼ä¸å辨çæ¯ä¸¤ä¸ªä¸åçæ¦å¿µã
æ®px = dip * density / ï¼åå½å±å¹å¯åº¦ä¸ºæ¶ï¼px = dip
æ ¹æ® google ç建议ï¼TextView çåå·æå¥½ä½¿ç¨ sp ååä½ï¼èä¸æ¥çTextViewçæºç å¯ç¥Androidé»è®¤ä½¿ç¨spä½ä¸ºåå·åä½ãå°dipä½ä¸ºå ¶ä»å ç´ çåä½ã