搜尋

首頁  >  問答  >  主體

android-ui - Android 的dip与px之间转换的问题

ringa_leeringa_lee2773 天前707

全部回覆(3)我來回復

  • PHP中文网

    PHP中文网2017-04-17 16:26:22

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

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

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

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

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

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

    回覆
    0
  • 迷茫

    迷茫2017-04-17 16:26:22

    簡單的說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

    回覆
    0
  • 怪我咯

    怪我咯2017-04-17 16:26:22

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

    回覆
    0
  • 取消回覆