【Android學(xué)習(xí)經(jīng)驗分享·4】如何快速理解Android開發(fā)原理-1-布局

? ? ? ? 8-22填坑。這十幾天里,閉關(guān)了幾天研究SQLite,又出去旅行了一周,所以拖更了QAQ

? ? ? ? 剛開始接觸Android開發(fā)的時候,如果高中有做過Visual Basic程序設(shè)計,就很容易理解所謂的面向?qū)ο缶幊蹋]有對象,下一個)。

? ? ? ? 以高中教科書里的VB為例,VB工程的控件都在一個窗體(Form)里面,控件的實例化需要定義各種屬性(比如name,caption,visible....),我們可以針對每個控件創(chuàng)建事件處理代碼,比如command1_click。學(xué)過VB的同學(xué)可以好好回憶一下。

? ? ? ? 在Android里面,工程就是你創(chuàng)建的package(app),窗體可以粗略理解為Activity,控件就是Button,TextView,ImageView......然后,VB里的事件代碼,在Android里通過Java代碼實現(xiàn)(Kotlin語言目前還沒有廣泛使用)

--------分割線--------

? ? ? ? 與VB不同的是,VB窗體可以通過自帶網(wǎng)格參考線來定義布局,而Android應(yīng)用為了適應(yīng)不同尺寸以及分辨率的顯示屏,需要用嚴謹?shù)牟季址绞剑簿褪荓inearLayout,RelativeLayout......通過設(shè)定布局形式來在不同屏幕上呈現(xiàn)相同的效果(知識點:dp的概念)。其中的原理就是:VB的窗體可以自由調(diào)正大小,大小以px(像素)計算。而手機上,APP默認就是鋪滿整個屏幕的。而手機屏幕也很復(fù)雜,不僅有4.7,5.0,5.5這樣的尺寸,也有720P,1080P,2K這樣的分辨率。

? ? ? ? 假如用px作為單位,會出現(xiàn)好多問題。

? ? ? ? 問題一:如果你開發(fā)的時候設(shè)計的是1080P的分辨率,那么這款A(yù)PP在720P的顯示屏上運行的時候,由于分辨率的限制,就無法顯示完整的內(nèi)容,如果在2K屏上運行,就會有一片空白區(qū)域。

? ? ? ? 問題二:如果你開發(fā)的時候也用1080P,那么在5.5英寸1080P屏幕和5.0寸1080P屏幕上面,整個界面是被按比例縮放的,一個100*60px的按鈕,在兩個屏幕上的大小就不一樣了。

? ? ? ? 解決方法:引入dp的概念。dp=dip:device independent pixels(設(shè)備獨立像素),如果一個設(shè)備顯示屏幕的像素密度為160ppi,那么1dp剛好對應(yīng)1px。按照比例關(guān)系,像素密度越高的屏幕,1dp對應(yīng)的像素點越多。這樣有一個很直接的好處就是,創(chuàng)建一個100*60dp的按鈕,放到不同ppi的屏幕下,顯示出來的大小是幾乎一樣的(至于為什么是幾乎,可以去了解一下知乎里面的一個問題https://www.zhihu.com/question/20697111)

? ? ? 順便解釋一下上面提到的兩個非常常用的基本布局:LinearLayout,RelativeLayout。LinearLayout翻譯過來是線性布局,就是大致確定布局內(nèi)部的控件排列方向為橫向或者縱向。RelativeLayout翻譯過來是相對布局,可以確定控件與布局四邊的位置和與指定一個控件的相對位置。很多時候這些Layout都是內(nèi)部嵌套著Layout的。用于呈現(xiàn)復(fù)雜的UI界面。

? ? ? 理解上面幾段文字后你大概就明白了為什么布局設(shè)計要如此嚴謹了。以后當(dāng)你發(fā)現(xiàn)Android Studio模擬設(shè)備和你手上的真機顯示效果不一樣時,記得回到XML文件里面去分析一下自己的布局是否嚴謹。

? ? ? ? 今天就先講這么一小段吧。后續(xù)還會有針對控件的解讀(涉及Java類的繼承)和針對源碼書寫(涉及Java語法)的解讀。

? ? ? ? 2017-8-22

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容