全部博文(237)
分类: 嵌入式
2011-06-22 16:51:30
sp:一般用于设置字体大小,最重要的特点是与屏幕密度无关,与scale无关。
dip:等同于dp,通常用于设置控件长度和宽度,最重要特点也是与屏幕密度无关。
px:像素,多用于设置宽度和长;pt:磅,多用于设置字体大小。
分辨率:整个屏是多少点,比如800x480,它是对于软件来说的显示单位,以px为单位的点。
density(密度)值表示每英寸有多少个显示点,与分辨率是两个概念。
apk的资源包中,
当屏幕density=240时使用hdpi标签的资源
当屏幕density=160时,使用mdpi标签的资源
当屏幕density=120时,使用ldpi标签的资源。
一般android设置长度和宽度多用dip,设置字体大小多用sp.
在屏幕密度为160,1dp=1px=1dip, 1pt = 160/72 sp 1pt = 1/72 英寸.当屏幕密度为240时,1dp=1dip=1.5px.
另外补充
获取屏幕硬件分辨率方法:
view plaincopy to clipboardprint?
TextView tv=(TextView)findViewById(R.id.tv);
DisplayMetrics dm=new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
float width=dm.widthPixels*dm.density;
float height=dm.heightPixels*dm.density;
tv.setText(width+"X"+height);
其中dm.withPixels和dm.heightPixels得到的宽度和高度值都是以宽度为320为标准的,也就是说,不管你的屏幕是什么分辨率,宽度都会得到320,而高度就根据比例宽高比例计算,所以在我的Milestone上(480X854)得到的宽高为320X569,如果要得到真实的分辨率,就必须乘以dm.density,这个值是因硬件分辨率而异的,如果是屏幕硬件宽为320像素,那么这个值就是1,如果是480,这个值就是480/320,就是1.5。
代码为:
public static String getDisplayMetrics(Context cx) { 另外一种方法是: WindowManager windowManager = getWindowManager();
String str = "";
DisplayMetrics dm = new DisplayMetrics();
dm = cx.getApplicationContext().getResources().getDisplayMetrics();
int screenWidth = dm.widthPixels;
int screenHeight = dm.heightPixels;
float density = dm.density;
float xdpi = dm.xdpi;
float ydpi = dm.ydpi;
str += "The absolute width:" + String.valueOf(screenWidth) + "pixels\n";
str += "The absolute heightin:" + String.valueOf(screenHeight)
+ "pixels\n";
str += "The logical density of the display.:" + String.valueOf(density)
+ "\n";
str += "X dimension :" + String.valueOf(xdpi) + "pixels per inch\n";
str += "Y dimension :" + String.valueOf(ydpi) + "pixels per inch\n";
return str;
}
Display display = windowManager.getDefaultDisplay();
ANDROID_WIDTH = display.getWidth();
ANDROID_HEIGHT = display.getHeight();
tianbianfei2011-07-14 11:04:50
楼主,请帮忙解决一个问题好吗?http://doumiw.com/market/community/t!showTopic.do?topicId=24