文章摘要:
Android開發中,界面顯示很重要,常用的是dp和px的認識,還有其轉換。本文以個人前兩天碰到的問題來演示dp、px轉換過程。
1、問題描述
系統登錄界面有自己開發的輸入鍵盤,在像素1280*728的Android設備上正常顯示,而在1920*1128的設備上卻顯示變小,且相對位置發生改變。
2、問題分析
1)鍵盤爲自定義的佈局,彈出位置設定如下:
numkeyPop.showAtLocation(dialog, Gravity.NO_GRAVITY, width1, height1);
2)參數含義
dialog:依附的view
Gravity.NO_GRAVITY:不採用相對座標
width2, height2:顯示的座標起點,單位是px
3)源碼分析
int width = wm.getDefaultDisplay().getWidth();
int width1 = (width / 2) + 216; //查看佈局,登錄框是430dp,216的單位是dp
4)分析總結
參數值傳入錯誤,單位不一致。
3、解決方法
對dp進行轉換,換成px
步驟如下:
1)獲取像素密度
float scale = context.getResources().getDisplayMetrics().density;
2)轉換
int width2 = (int)((width / 2) + 216 * scale + 0.5f);
3)修改參數
numkeyPop.showAtLocation(dialog, Gravity.NO_GRAVITY, width2, height2);
4、案例總結
1)1280*728上 1dp = 2.9px,1920*1128上 1dp = 4.4px
2)dp是一個相對單位
3)java方法中傳遞的參數的單位要注意