Android螢幕適配篇(一)

2021-07-10 08:07:00 字數 4104 閱讀 6613

螢幕的尺寸​指的是螢幕對角線的長度,單位是英吋(1英吋=2.54厘公尺)。常見的螢幕尺寸有 4.0,5.0,5.5,6.0,8.0,10.0等,平時我們說你手機又多大,這裡指的就是螢幕尺寸。

螢幕解析度指的是螢幕上橫向,縱向上的畫素點數量。單位是px,1px=1個畫素點。我們通常以橫向畫素*縱向畫素來表示。如320*480,1080*1920等。

密度跟數學上的密度有些相似,指的是每英吋上的畫素點數,單位是dpi。當然密度越大螢幕越清晰。在單一變化的條件下,螢幕尺寸越小,解析度越高,畫素密度就越大,反之越小。

dip和dp是乙個意思,即density independent pixels的縮寫,dp和px又是如何換算的呢?

/** 

* 根據手機的解析度從 dp 的單位 轉成為 px(畫素)

*/public

static

intdip2px(context context, float dpvalue)

/**

* 根據手機的解析度從 px(畫素) 的單位 轉成為 dp

*/public

static

intpx2dip(context context, float pxvalue)

在android中,規定以160dpi為基準,1dip=1px,如果密碼是480dpi,則1dpi=3px,以此類推。​​下面我們來看乙個假設,在螢幕上我們畫一條320px的線,在840*800解析度的手機上顯示為螢幕的2/3,在320*480解析度的手機上則佔滿了螢幕的寬度。如果使用dp為單位,在這兩種解析度的手機上,顯示一樣的長度,這也是我們在寫布局的時候盡量使用dp而不是px的原因。而sp可以根據文字大小首選項進行縮放,是設定字型大小的單位。​

mdpi、hdpi、xdpi、xxdpi用來修飾android中drawable資料夾及values資料夾,用來區分不同畫素密度下的和dimen值。在進行開發的時候,我們需要把合適大小的放到合適的資料夾裡面:

drawable資料夾

尺寸mdpi(~160dpi)

48x48dp

hdpi(~240dpi)

72x72dp

xhdpi(~320dpi)

96x96dp

xxhdpi(~480dpi)

144x144dp

***hdpi(~640dpi)

192x192dp

對於以上五種主流的畫素密度,應按照2:3:4:6:8的比例進行縮放​。從android 4.3 mipmap資料夾已經替換掉了drawable資料夾。mipmap資料夾效能更好,占用記憶體更少。所以現在官方推薦使用mipmap。

android:layout_width=」0dp」

<?xml version="1.0" encoding="utf-8"?>

xmlns:android=""

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="horizontal">

android:layout_width="0dp"

android:layout_height="32dp"

android:layout_weight="1"

android:background="#ff0000">

textview>

android:layout_width="0dp"

android:layout_height="32dp"

android:layout_weight="1"

android:background="#00ff00">

textview>

linearlayout>

效果圖:

如果紅色textview的layout_weight=「2」呢:

那麼layout_weight所佔父控制項的比例公式為:子控制項的weight值/(所有子控制項的weight值的和)*父控制項的寬度或者是高度。

android:layout_width=」wrap_content」

<?xml version="1.0" encoding="utf-8"?>

xmlns:android=""

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="horizontal">

android:layout_width="wrap_content"

android:layout_height="32dp"

android:layout_weight="2"

android:text="你是紅色"

android:background="#ff0000">

textview>

android:text="我是藍色"

android:layout_width="wrap_content"

android:layout_height="32dp"

android:layout_weight="1"

android:background="#00ff00">

textview>

linearlayout>

效果圖:

結論:子控制項的weight值/(所有子控制項的weight值的和)*剩餘空間的寬度或高度

注意:有些資料可能沒有區分清楚wrap_content 和 0dp 的情況,或者說它們情況是一樣的。

android:layout_width=」match_parent」

<?xml version="1.0" encoding="utf-8"?>

xmlns:android=""

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="horizontal">

android:layout_width="match_parent"

android:layout_height="32dp"

android:layout_weight="1"

android:text="你是紅色"

android:background="#ff0000">

textview>

android:text="我是藍色"

android:layout_width="match_parent"

android:layout_height="32dp"

android:layout_weight="2"

android:background="#00ff00">

textview>

linearlayout>

效果圖:

結論:假設每個textview的寬度為​match_parent,如果我們設父控制項的寬度為m,那麼每個textview的寬度都為m,那麼剩餘的寬度我們就可以求出來 m-(m+m)=-m。紅色textview的weight=1,剩餘的寬度佔比為:1/(1+2)=1/3,所有我們就得出了它的最終寬度為m+1/3*(-m)=2/3m,藍色的textview所佔寬度同淺綠色textview的演算法,最終寬度為m+2/3*(-m)=1/3m。

android螢幕適配

1 配置android應用程式適配在不同的手機上,需要在androidmanifest.xml檔案的manifest標籤中新增子元素 1 2 3 4 5 6 7 8 9 10 manifestxmlns android supports screens android smallscreens tr...

Android螢幕適配

在sdk中的幫助文件中。develpe training best practices supporting multiple screens 這裡有多屏適配的介紹。現做簡單記錄。screen size small 至少 426dp x 320dp normal 至少 470dp x 320dp l...

android螢幕適配

ui在不同的螢幕畫素或大小中顯示效果可能會不同 1 建議使用盡量使用線性布局和相對布局,基本上不會產生螢幕大小不適應的問題 2 設定控制項寬高的時候使用單位dip dp 是根據當前裝置大小比例計算出來的 3 文字設定盡量使用sp單位 4 盡量不使用px設定大小 畫素px和dip相互轉換工具,實現兩種...