Android中你可能忽略的知識點(1)-分辨率那些事

一得院、dp/dip、px、sp阴汇、dpi基本概念

  • dp/dip(device independent pixels) 設備獨立像素 與設備有關系 對角線每英寸的像素點的個數(shù)
  • px 像素,pixel的縮寫节槐。這個應該不需要過多解釋搀庶,平常我們所說的手機的分辨率為1920x1080,這里的單位用的就是px铜异,也就是說高為1920個像素哥倔,寬為1080個像素
  • sp 在Android中用來表示字體大小,“Android sp單位除了受屏幕密度影響外揍庄,還受到用戶的字體大小影響咆蒿,通常情況下,建議使用sp來跟隨用戶字體大小設置。除非一些特殊的情況,不想跟隨系統(tǒng)字體變化的蜡秽,可以使用dp
  • dpi 是dot per inch府阀,每英寸多少點,ppi是 Pixel per inch芽突,每英寸像素數(shù)试浙,針對顯示器的設計時,dpi=ppi

二寞蚌、ldpi田巴、mdpi、hdpi挟秤、xhdpi壹哺、xxhdpi、xxxhdpi

在Android開發(fā)中我們經(jīng)乘腋眨看到資源文件下面有這樣六個文件夾管宵,很多人其實并不是真正的了解它們的意思,為什么會有這6個文件夾攀甚?相信大部分人也就知道是為了屏幕適配箩朴,大一點分辨率的圖片放到大的文件夾里,具體的說一下秋度,首先看一下:

image

當然還有xxxhdpi 它的分辨率為2160x3840炸庞,也就是常說的4K屏,目前市場上好像只有一款索尼Xperia Z5 Premium荚斯。

其實這六個密度的圖片文件夾與之對應的是AndroidDisplayMetrics類中的6個常量

/**
     * Standard quantized DPI for low-density screens.
     */
    public static final int DENSITY_LOW = 120;
    
    /**
     * Standard quantized DPI for medium-density screens.
     */
    public static final int DENSITY_MEDIUM = 160;
    
    /**
     * Standard quantized DPI for high-density screens.
     */
    public static final int DENSITY_HIGH = 240;
    
    /**
     * Standard quantized DPI for extra-high-density screens.
     */
    public static final int DENSITY_XHIGH = 320;
    
    /**
     * Standard quantized DPI for extra-extra-high-density screens.
     */
    public static final int DENSITY_XXHIGH = 480;
    
     /**
     * Standard quantized DPI for extra-extra-extra-high-density screens.  Applications
     * should not generally worry about this density; relying on XHIGH graphics
     * being scaled up to it should be sufficient for almost all cases.  A typical
     * use of this density would be 4K television screens -- 3840x2160, which
     * is 2x a traditional HD 1920x1080 screen which runs at DENSITY_XHIGH.
     */
    public static final int DENSITY_XXXHIGH = 640;

那么這些常量具體是用來做些什么的呢埠居?
我們可以看到注釋:也就是說當手機dpi是120的時候會加載ldpi下的資源,160的時候會加載mhdpi下的資源事期,以此類推...但是我們在開發(fā)中可能并不會真的要建立這6個資源文件夾,因為這6套資源圖片文件所占的容量大小還是不可小覷的滥壕,畢竟xxxhdpi中的每張圖片都不是很小的。

那么我們在和UI小姐姐要圖的時候該怎么要呢兽泣?相信目前很多開發(fā)人員都會用IOS中的@2X的圖片捏浊,為什么可以直接用IOS的@2X圖片呢?先來看一下IOS中手機尺寸和分辨率

設備 屏幕尺寸 分辨率 Reader
iPhone4/4s 3.5 640x960 @2x
iPhone5/5s/5c 4.0 640x1136 @2x
iPhone6 4.7 750x1334 @2x
iPhone6P 5.5 1242x2208 @3x
iPhone7 4.7 750x1334 @2x
iPhone7P 5.5 1242x2208 @3x
iPhone8 4.7 750x1334 @2x
iPhone8P 5.5 1080x1920 #3x

我們可以看到上面@2x的圖的分辨率都是750x1334撞叨,而我們的xhdpi的分辨率為720x1280,相差的不多浊洞,所以一般的公司只按照IOS的UI設計一套UI圖和切圖牵敷,而苦逼的Android開發(fā)就硬著眉頭上吧。當然如果是一些小的icon的在屏幕適配的時候不適合的話法希,可以放到mdpi文件夾中枷餐,這個具體細節(jié)就得自己去試了。

當然我個人覺得Android有自己的風格苫亦,比如Android中的Material Design風格毛肋,以及Android中的View怨咪,progressbar等等,如果非要為了統(tǒng)一那么開發(fā)人員必定會付出額外的時間去開發(fā)UI設計的效果润匙,這樣反倒浪費了時間同時也不能展現(xiàn)出來各個平臺的獨有的特性诗眨,GoogleIO剛剛結束,Google出品的APP將Android平臺的特性展現(xiàn)的淋漓盡致孕讳,當然這些都純屬個人看法匠楚,話說回來,那么就需要UI設計師了解Android和IOS的特性厂财,同時為兩個平臺設計各個風格的UI芋簿,所以...各自安好

三、轉換關系

Android開發(fā)中我們在XML文件里面設置高寬度的時候都會進行一次轉換璃饱,也就是把非標準尺寸轉換為標準尺寸:

  • dp->px: TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 20, context.getResources().getDisplayMetrics());

  • in->px: TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_IN, 20, context.getResources().getDisplayMetrics());

  • mm->px: TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_MM, 20, context.getResources().getDisplayMetrics());

  • pt->px: TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PT, 20, context.getResources().getDisplayMetrics());

  • sp->px: TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 20, context.getResources().getDisplayMetrics());

public static float applyDimension(int unit, float value,  
                                   DisplayMetrics metrics)  
{  
    switch (unit) {  
    case COMPLEX_UNIT_PX:  
        return value;  
    case COMPLEX_UNIT_DIP:  
        return value * metrics.density;  
    case COMPLEX_UNIT_SP:  
        return value * metrics.scaledDensity;  
    case COMPLEX_UNIT_PT:  
        return value * metrics.xdpi * (1.0f/72);  
    case COMPLEX_UNIT_IN:  
        return value * metrics.xdpi;  
    case COMPLEX_UNIT_MM:  
        return value * metrics.xdpi * (1.0f/25.4f);  
    }  
    return 0;  
} 

可以看一下源碼与斤,和我們經(jīng)常使用的px2dp、sp2px的方法是不是一樣的荚恶,原理都是通過獲取手機的DisplayMetrics撩穿,然后進行倍數(shù)轉換。

四裆甩、其他

1.Manifest

在Manifest中添加子元素
android:anyDensity="true"時冗锁,應用程序安裝在不同密度的終端上時,程序會分別加載xxhdpi嗤栓、xhdpi冻河、hdpi、mdpi茉帅、ldpi文件夾中的資源叨叙。

2. .9圖片

使用圖片資源時,如果出現(xiàn)拉伸堪澎,因為圖片處理的原因擂错,會變形,導致界面走形樱蛤。9-patch PNG圖片也是一種標準的PGN圖片钮呀,在原生PNG圖片四周空出一個像素間隔,用來標識PNG圖片中哪些部分可以拉伸昨凡、哪些不可以拉伸爽醋、背景上的邊框位置等。

“上便脊、左”定義可拉伸區(qū)域

“右蚂四、下”定義顯示區(qū)域,如果用到完整填充的背景圖,建議不要通過android:padding來設置邊距遂赠,而是通過9-patch方式來定義久妆。

Android SDK中提供了編輯9-Patch圖片的工具,在tools目錄下draw9patch.bat跷睦,能夠立刻看到編輯后的拉伸效果筷弦,也可以直接用其他圖片編輯工具編輯,但是看不到效果送讲。

相關推薦

Android開發(fā):最全面奸笤、最易懂的Android屏幕適配解決方案

Android屏幕適配全攻略(最權威的官方適配指導

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市哼鬓,隨后出現(xiàn)的幾起案子监右,更是在濱河造成了極大的恐慌,老刑警劉巖异希,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件健盒,死亡現(xiàn)場離奇詭異,居然都是意外死亡称簿,警方通過查閱死者的電腦和手機扣癣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來憨降,“玉大人父虑,你說我怎么就攤上這事∈谝” “怎么了士嚎?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長悔叽。 經(jīng)常有香客問我莱衩,道長,這世上最難降的妖魔是什么娇澎? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任笨蚁,我火速辦了婚禮,結果婚禮上趟庄,老公的妹妹穿的比我還像新娘括细。我一直安慰自己,他們只是感情好戚啥,可當我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布勒极。 她就那樣靜靜地躺著,像睡著了一般虑鼎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天炫彩,我揣著相機與錄音匾七,去河邊找鬼。 笑死江兢,一個胖子當著我的面吹牛昨忆,可吹牛的內容都是我干的。 我是一名探鬼主播杉允,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼邑贴,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了叔磷?” 一聲冷哼從身側響起拢驾,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎改基,沒想到半個月后繁疤,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡秕狰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年稠腊,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鸣哀。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡架忌,死狀恐怖,靈堂內的尸體忽然破棺而出我衬,到底是詐尸還是另有隱情叹放,我是刑警寧澤,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布低飒,位于F島的核電站许昨,受9級特大地震影響,放射性物質發(fā)生泄漏褥赊。R本人自食惡果不足惜糕档,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望拌喉。 院中可真熱鬧速那,春花似錦、人聲如沸尿背。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽田藐。三九已至荔烧,卻和暖如春吱七,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鹤竭。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工踊餐, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人臀稚。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓吝岭,卻偏偏與公主長得像,于是被迫代替她去往敵國和親吧寺。 傳聞我的和親對象是個殘疾皇子窜管,可洞房花燭夜當晚...
    茶點故事閱讀 44,969評論 2 355

推薦閱讀更多精彩內容