Android螢幕適配思路總結

2021-09-24 06:27:16 字數 2792 閱讀 9073

前言

文章部分內容選取自其他文章,主要作為自己的思路梳理。侵刪、

參考文章

一種極低成本的android螢幕適配方式

android螢幕適配很麻煩嗎?不!太簡單了。。。(持續更新)

android develop

基本概念

另外,畫素是px。不用多說。

基本計算公式

android中的dp在渲染前會將dp轉為px,計算公式: px = density * dp; density = dpi / 160; px = dp * (dpi / 160); 然後是基本對應情況

原理分析

px = density * dp; density = dpi / 160; px = dp * (dpi / 160); 拿這三個公式來說,俗話說,功夫再高。也怕菜刀。公式再多,得看那個是源頭,哪個是推導出來的。那哪個是起決定作用的。很明顯,是手機的物理大小,實實在在的放在那裡。那就是我們的螢幕密度,dpi、

因為尺寸大小是說的斜邊。那就計算出斜邊的畫素。簡單的勾股定理。沒有問題。 因為google那邊規定的計算方法,是dpi為160的時候,px跟dp是1比1的關係。然後我們的縮放因子density就是根據螢幕密度(畫素密度)來算的,density=dip/160; 密度大了縮放因子也大,這個好理解。

適配思路

適配的煩惱就在於,我們的廠商產的手機畫素密度千變萬化,寬高比例也是不盡相同。。根本不像是google給的h,xh,xxh這些。 那我們ui給的設計圖比如按照寬度360dp給的,拿上面的圖為例,這個手機的密度是440.按照公式。實際寬度dp為1080/(440/160)=392.7dp. 也就是說,實際螢幕比設計圖要寬的。這樣的話,實際上看起來按照360dp的控制項給小了、當然了。有的寬度更窄,那就給大了。 如何讓不同手機的px=density*dp。中的px跟dp對應呢。只有乙個辦法,修改density。如何計算, 比如ui給的設計圖寬度是360dp設計的,而且絕大多數頁面都是按照寬度來適應。那得到手機的實際寬度畫素數,來除以這個360dp。那就得到了這個比例,把這個比例作為新的density。即是正確的比例。那問題就迎刃而解了。得到density。在得到字型的比例。就完成了。

**

public class screencompactutil 

}@override

public void onlowmemory

() });}}

/*** 在activity的oncreate中,setcontentview之前呼叫,按寬度適配

* @param activity

*/public static void adaptbywidth(activity activity)

/*** * 在activity的oncreate中,setcontentview之前呼叫,按高度適配

* @param activity

*/public static void adaptbyheight(activity activity)

/*** targetdensity

* targetscaleddensity

* targetdensitydpi

* 這三個引數是統一修改過後的值

* * orientation:方向值,傳入width或height density.width或者density.height

*/float targetdensity = 0;

try else

//由於手機的長寬不盡相同,肯定會有除不盡的情況,有失精度,所以在這裡把所得結果做了乙個保留兩位小數的操作

//decimalformat df = new decimalformat("0.00");

//string s = df.format(division);//印尼與英語之間切換時,format的.不一樣,有的國家是.號,有的是,號,導致float.parsefloat(s)拋異常

targetdensity = (float) math.round(division*100)/100;

// targetdensity = (float) division;

} catch (exception e)

int targetdensitydpi = (int) (160 * targetdensity);

/***

* 最後在這裡將修改過後的值賦給系統引數

** 只修改activity的density值,不影響其他頁面

*/displaymetrics activitydisplaymetrics = activity.getresources().getdisplaymetrics();

activitydisplaymetrics.density = targetdensity;

activitydisplaymetrics.scaleddensity = targetscaleddensity;

activitydisplaymetrics.densitydpi = targetdensitydpi;

}//除法

private static double division(double a, double b) else

return div;

}}複製**

總結

本人一直對這個螢幕適配有模糊的概念,腦子裡記著3 4 6 8.12 這些比例。然後畫素轉化為dp是怎麼轉換的。但是仔細一思考,找不到公式的源頭。對適配也是dp走到底。現在終於算是有點思路了,本文算是對自己思路的梳理,日後忘記了可以拾起。所以整理一下。文章中的截圖來自於其他文章(見參考文章)。包括部分文字。然後這個utils類是專案中小夥伴修改後搞進來的。非常感謝。

Android螢幕適配總結

分類 android點滴 2013 04 09 15 51 1290人閱讀收藏 舉報一 幾個概念 1 ppi pixel per inch,單位長度畫素個數。計算方法是寬 寬 長 長,然後開方 即對角線的畫素個數 然後除以對角線的長度。例如iphone4s 960x640畫素,對角線3.5英吋,則p...

Android螢幕適配總結

1.關於drawable資料夾 首先drawable資源分為xxhdpi,xhdpi,hdpi,mdpi,ldpi,分別為超超高密度400dpi 左右 超高密度320dpi,高密度240dpi,中密度160dpi,低 密度120dpi。然後手機的螢幕又分為fwvga,wvga,vga,hvga,qv...

android螢幕適配

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