android-ui - Android 的dip与px之间转换的问题
ringa_lee
ringa_lee 2017-04-17 16:24:22
0
3
703
ringa_lee
ringa_lee

ringa_lee

全部回覆(3)
Ty80

最近剛學這塊,簡單說下我的理解,如有錯誤,歡迎指正

  • 關於dp和px轉換,看一下他們換算公式

    dpi = 螢幕水平(垂直)方向像素個數/螢幕的水平(垂直)方向的尺寸
    dp = (px * 160) / (螢幕水平(垂直)方向像素個數/螢幕的水平(垂直)方向的尺寸)

你能說螢幕大小和解析度沒有關係?他們不是直接的影響,而是間接的。

  • 你這麼理解也沒問題。 dp是為了適配而生的,以前你再佈局文件中設置按鈕寬度為20px, 在不同分辨率手機調試應用,你會發現他們是不一樣大小的,所以你要手動適配,很累。如果寬度20dp,系統會經過內部換算後在不同解析度下顯示的大小是一致的,這也就是你用尺量,為什麼他們是一樣大小的原因。

最後一個問題,因為沒做過類似工作,就不回答了,不過你可以參考官方裡面關於tv開發的指導文件

迷茫

簡單的說dpi(dots-per-inch)說的是每英吋上的點數,不是每英吋上的像素,ppi(pixel-per-inch)才是每英吋的像素,計算螢幕尺寸是透過ppi來計算的不是透過dpi。
dp與px的轉換公式是:
px = dp * density
density這個值指的就是螢幕的邏輯密度,這個邏輯密度要怎麼計算呢?一般160dpi的density值為1,舉個例子,一般情況下1920*1080 的density就是12X9。實際使用時也需要考慮手機狀態列和標題列所佔用的空間大小。
假設是20dp大小,他在320480 上的像素是20 2 = 40px,在19201080上是 20 12 = 240px 怎麼會一樣大小。
得到了像素px之後再根據螢幕中x,y方向上的ppi來最終決定了控制項的大小。
上面所述的這些值都可以透過DisplayMetrics這​​類來取得到,
density = mContext.getResources().getDisplayMetrics().density
螢幕x軸方向的ppi = mContext.getResources().getDisplayMepis(
螢幕y軸方向的ppi = mContext.getResources().getDisplayMetrics().ydpi

刘奇

講道理。 。直接用百分百佈局庫。 。 。 dp這是一個坑人的設定。 。 。多少技術漢子和設計妹子在這dp上打的頭破血流。 。 。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板