现在android手机越来越便宜了,所以开发的话用的最多的还是真机.作为一个程序员,如果拿着手机却在百度找手机的参数,这可不太好.
所以,让我们从程序员的角度来了解一下手机显示屏的参数.
public class MainActivity extends Activity {
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取显示屏实例
Display d = getWindowManager().getDefaultDisplay();
//将显示屏的信息转换成字符串
String show = d.toString();
//以逗号为分隔符对字符串断行,看起来舒服些
StringBuffer sb = new StringBuffer();
String[] strs = show.split(",");
for(String str : strs)
{
sb.append(str+"\n");
}
//DisplayMetrics是一个描述显示屏一般信息(大小,密度,字体缩放等)的结构体
DisplayMetrics dm = new DisplayMetrics();
d.getMetrics(dm);
//屏幕宽和高,单位是像素
int width = dm.widthPixels;
int height = dm.heightPixels;
//屏幕每英寸像素点
float xdpi = dm.xdpi;
float ydpi = dm.ydpi;
//计算宽和高是多少英寸
float xInch = width / xdpi;
float yInch = height / ydpi;
//计算显示屏是多少英寸
double screenInch = Math.sqrt(xInch * xInch + yInch * yInch);
String sScreenInch = String.format("屏幕是 %.1f 英寸", screenInch);
sb.append(sScreenInch);
tv = (TextView)findViewById(R.id.show);
tv.setText(sb.toString());
}
}
下面是运行截图:
看到这些参数,应该有人已经猜到我用的是MX3了,吐槽下,手机太不经摔了,2次就摔花屏了
下面一一来说下参数的意思:
1. real 1080 x 1800
这个简单,宽1080像素 高1800像素
2.density 440 (415.636 x 415.636)dpi (dpi: dots per inch)
通用的算法是这样的,
像素密度density = 开方(1080平方+1800平方) / 屏幕英寸(这里是5.1)
那么结果是: 约等于412 dpi
难道是我数学不好?
换个方向算,若要density = 440,那么,计算过程应该是这样:
开方(1080平方+1920平方) / 5英寸 = 440 虚假宣传
3.ScaledDensity = 2.75
这个和开发就关系很大了,因为已知 屏幕像素密度是"440dpi"
那么 440 / 160 = 2.75
为什么是除以160呢?
安卓规定,
屏幕密度是160dpi时 , 1dip = 1 px;
屏幕密度是240dpi时 , 1dip = 1.5 px;
屏幕密度是320dpi时 , 1dip = 2 px;
最后,算一下我这个手机屏幕宽高各是多少dp吧:
宽 : 1080 / 2.75 = 393 dp
高: 1800 / 2.75 = 655 dp
当然,实际计算布局高度的时候,还要减去通知栏和标题栏高度.