相信各位做Android開發(fā)的朋友們對(duì)Android手機(jī)做適配是件很煩的事。在美工里一般用的單位是px,而Android為了適配,官方提供了dp這樣一個(gè)單位在布局文件里使用。但是如果要?jiǎng)討B(tài)調(diào)整控件的大小呢?在代碼里面又怎么使用dp呢?其實(shí)dp這個(gè)單位只是分辨率和像素密度的一個(gè)比值,我們只需要獲取到這兩個(gè)值,把他們出一下就行了,就是這么簡(jiǎn)單。廢話不多說,代碼貼上:
public void getAndroiodScreenProperty() {
WindowManager wm = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics dm = new DisplayMetrics();
wm.getDefaultDisplay().getMetrics(dm);
int width = dm.widthPixels; // 屏幕寬度(像素)
int height = dm.heightPixels; // 屏幕高度(像素)
float density = dm.density; // 屏幕密度(0.75 / 1.0 / 1.5)
int densityDpi = dm.densityDpi; // 屏幕密度dpi(120 / 160 / 240)
// 屏幕寬度算法:屏幕寬度(像素)/屏幕密度
int screenWidth = (int) (width / density); // 屏幕寬度(dp)
int screenHeight = (int) (height / density);// 屏幕高度(dp)
Log.d("h_bl", "屏幕寬度(像素):" + width);
Log.d("h_bl", "屏幕高度(像素):" + height);
Log.d("h_bl", "屏幕密度(0.75 / 1.0 / 1.5):" + density);
Log.d("h_bl", "屏幕密度dpi(120 / 160 / 240):" + densityDpi);
Log.d("h_bl", "屏幕寬度(dp):" + screenWidth);
Log.d("h_bl", "屏幕高度(dp):" + screenHeight);
}
需要注意的是,在一個(gè)低密度的小屏手機(jī)上,僅靠上面的代碼是不能獲取正確的尺寸的。
比如說,一部240x320像素的低密度手機(jī),如果運(yùn)行上述代碼,獲取到的屏幕尺寸是320x427。
因此,研究之后發(fā)現(xiàn),若沒有設(shè)定多分辨率支持的話,
Android系統(tǒng)會(huì)將240x320的低密度(120)尺寸轉(zhuǎn)換為中等密度(160)對(duì)應(yīng)的尺寸,
這樣的話就大大影響了程序的編碼。
所以,需要在工程的AndroidManifest.xml文件中,加入supports-screens節(jié)點(diǎn),如下:
<!-- 得到屏幕正常的物理尺寸 -->
<supports-screens
android:smallScreens="true"
android:normalScreens="true"
android:largeScreens="true"
android:resizeable="true"
android:anyDensity="true" />
原文:https://blog.csdn.net/wangliblog/article/details/22501141