Android編程權(quán)威指南(第二版)學(xué)習(xí)筆記(八)—— 第8章 使用布局與組件創(chuàng)建用戶界面

本章主要介紹了一些進(jìn)階的界面設(shè)計(jì)知識(shí)就谜,以及如何用圖形化界面設(shè)計(jì) UI (雖然不推薦日常使用,但是至少要知道肋联,特別是在 Android Studio 2.2 推出之后腰懂,可以直接查看設(shè)計(jì)藍(lán)圖,更為直觀并且容易調(diào)整細(xì)節(jié))隅津。

GitHub 地址:
完成第八章诬垂,未完成挑戰(zhàn)
完成第八章的挑戰(zhàn)

1. 樣式(style) 與 主題(theme)

為什么我們需要樣式(style)? 因?yàn)楫?dāng)界面有統(tǒng)一風(fēng)格時(shí)伦仍,就不需要針對(duì)每一個(gè)控件單獨(dú)寫(xiě)屬性了结窘,規(guī)定幾種樣式(style)即可。

style 是 XML 資源文件充蓝,含有用來(lái)描述組件行為和外觀的屬性定義隧枫。例如,下面的樣式能讓其顯示的文字大小大于一般的值谓苟。

<style name="BigTextStyle">
    <item name="android:textSize">20sp</item>
    <item name="android:padding">3dp</item>
</style>

我們可以在 res/values/ 目錄下的樣式文件中寫(xiě)入自己需要的屬性定義官脓,然后再布局文件中以 @style/my_own_style(file name) 的形式引用

什么是主題(theme)呢?主題是各種樣式的集合涝焙,從結(jié)構(gòu)上來(lái)說(shuō)卑笨,主體本身也是一種樣式資源,不過(guò)它的屬性指向了其他樣式資源

主題屬性引用 顧名思義就是將預(yù)定義的應(yīng)用主題樣式添加給指定組件纱皆,比如給 TextView 控件定義下面的屬性:

<style="?android:listSeparatorTextViewStyle">

意味著告訴 Android 運(yùn)行資源管理器:“在應(yīng)用主題里找到名為 listSeparatorTextViewStyle 的屬性湾趾。該屬性指向其他樣式資源芭商,請(qǐng)將其資源的值放在這里派草。”

2. margin 與 padding

Android 布局文件中的 margin 和 padding 跟 Web 編程的一樣铛楣,具體定義如下:

  • margin 指的是外邊距近迁,即指定視圖組件之間的距離
  • padding 指的是內(nèi)邊距,即指定視圖外邊框與其內(nèi)容間的距離

兩者之間區(qū)別如下圖:


margin 和 padding

3. dp簸州、sp 及屏幕像素密度

Android 使用密度修飾 drawable 目錄(如 drawable-xhdpi)下的圖像文件會(huì)自動(dòng)適配不同像素密度的屏幕鉴竭。那么問(wèn)題來(lái)了歧譬,加入圖像完成了自動(dòng)適配,但是邊距無(wú)法縮放適配搏存,或者用戶配置了大于默認(rèn)值的文字大小瑰步,會(huì)出現(xiàn)什么意外呢?

為了解決這些可能的問(wèn)題璧眠,Android 提供了密度無(wú)關(guān)的尺寸單位(density-independent dimension unit)缩焦。使用這種單位,可在不同屏幕密度的設(shè)備上獲得同樣的尺寸责静。無(wú)需進(jìn)行麻煩的轉(zhuǎn)換計(jì)算袁滥,應(yīng)用運(yùn)行時(shí),Android 會(huì)自動(dòng)將這種單位轉(zhuǎn)換成像素單位灾螃。

1. dp (dip, density-independent pixel) 密度無(wú)關(guān)像素

所謂密度無(wú)關(guān)题翻,即和屏幕的像素密度沒(méi)有關(guān)系。1dp 單位在設(shè)備的屏幕上總是等于 1/160 英寸腰鬼。使用 dp 的好處是嵌赠,無(wú)論屏幕密度如何,總能獲得同樣的尺寸熄赡。

px = dp * (dpi / 160)

其中猾普,dpi 即等于我們常說(shuō)的 ppi,計(jì)算公式即為

ppi = sqrt(屏幕橫向像素?cái)?shù)的平方 + 屏幕縱向像素?cái)?shù)的平方)/ 屏幕對(duì)角線英寸數(shù)

那么常見(jiàn)的 mdpi本谜, hdpi 是什么呢初家?對(duì)應(yīng)關(guān)系如下圖:


ppi 對(duì)應(yīng)尺寸

也就是說(shuō) 160ppi 像素密度的屏幕,又叫 mdpi 的屏幕乌助,程序中寫(xiě)的 1dp 在上面呈現(xiàn)的就是 1 像素(pixel溜在,px)。

2. sp (scale-independent pixel) 縮放無(wú)關(guān)像素

這種像素也與屏幕無(wú)關(guān)他托,但是與設(shè)置有關(guān)掖肋,一般用來(lái)設(shè)置文本的大小。

4. android:layout_weight 屬性

在 LinearLayout 中赏参,有這樣一個(gè)特殊屬性志笼,它能讓你自由分配擺放部件后的空間,避免大量留白把篓。它就是 android:layout_weight纫溃,這里的 weight 是權(quán)重的意思,也就是說(shuō)韧掩,每個(gè)部件都有自己的權(quán)重紊浩,用于分配擺放部件后剩余的空間。也就是說(shuō),如果兩個(gè)部件權(quán)重都是 1 時(shí)坊谁,它們平分?jǐn)[放它們之后的剩余空間费彼。

但是這樣就會(huì)出現(xiàn)一個(gè)問(wèn)題,由于分配的是剩余的空間口芍,所以在兩個(gè)部件 layout_width 屬性不一致(wrap_content 不算一致)時(shí)箍铲,layout_weight 屬性不能使部件平分整塊屏幕。如果想要平分怎么辦呢鬓椭?把兩個(gè)部件的 layout_width 都設(shè)為 0dp 再保持其 weight 相等虹钮,也就是把整塊屏幕都當(dāng)做剩余空間,就能平分整塊屏幕了膘融。

5. 挑戰(zhàn)練習(xí):日期格式化

我使用的是 SimpleDateFormat 類(lèi)芙粱,它能通過(guò)字符串來(lái)直接格式化 Date 類(lèi)型的數(shù)據(jù)。

SimpleDateFormat sdf = new SimpleDateFormat("EEEE, MMM d, y", Locale.US);
mDateButton = (Button) v.findViewById(R.id.crime_date);      mDateButton.setText(sdf.format(mCrime.getDate()));

GitHub Page: kniost.github.io
簡(jiǎn)書(shū):http://www.reibang.com/u/723da691aa42

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末氧映,一起剝皮案震驚了整個(gè)濱河市春畔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌岛都,老刑警劉巖律姨,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異臼疫,居然都是意外死亡择份,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)烫堤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)荣赶,“玉大人,你說(shuō)我怎么就攤上這事鸽斟“未矗” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵富蓄,是天一觀的道長(zhǎng)剩燥。 經(jīng)常有香客問(wèn)我,道長(zhǎng)立倍,這世上最難降的妖魔是什么灭红? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮口注,結(jié)果婚禮上变擒,老公的妹妹穿的比我還像新娘。我一直安慰自己疆导,他們只是感情好赁项,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布葛躏。 她就那樣靜靜地躺著澈段,像睡著了一般悠菜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上败富,一...
    開(kāi)封第一講書(shū)人閱讀 51,365評(píng)論 1 302
  • 那天悔醋,我揣著相機(jī)與錄音,去河邊找鬼兽叮。 笑死芬骄,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的鹦聪。 我是一名探鬼主播账阻,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼泽本!你這毒婦竟也來(lái)了淘太?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤规丽,失蹤者是張志新(化名)和其女友劉穎蒲牧,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體赌莺,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡冰抢,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了艘狭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片挎扰。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖巢音,靈堂內(nèi)的尸體忽然破棺而出鼓鲁,到底是詐尸還是另有隱情,我是刑警寧澤港谊,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布骇吭,位于F島的核電站,受9級(jí)特大地震影響歧寺,放射性物質(zhì)發(fā)生泄漏燥狰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一斜筐、第九天 我趴在偏房一處隱蔽的房頂上張望龙致。 院中可真熱鬧,春花似錦顷链、人聲如沸目代。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)榛了。三九已至在讶,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間霜大,已是汗流浹背构哺。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留战坤,地道東北人曙强。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像途茫,于是被迫代替她去往敵國(guó)和親碟嘴。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,111評(píng)論 25 707
  • 本文參考自: Google的官方權(quán)威適配文檔 郭霖:Android官方提供的支持不同屏幕大小的全部方法 Storm...
    M悇芐冋憶閱讀 12,822評(píng)論 5 56
  • 坐在飛機(jī)上囊卜,偶爾瞟向窗外娜扇,看著白白的云層,忽然感覺(jué)心內(nèi)一種短暫的寧?kù)o边败,平淡無(wú)奇的白云袱衷,顯得格外的美麗恬靜。 公司重...
    文一金閱讀 409評(píng)論 0 0
  • 關(guān)于戲曲笑窜,只是一種情節(jié)致燥,也是一種寄托,從未想過(guò)要去學(xué)唱戲排截,似懂非懂的欣賞也是好的嫌蚤。 地處魯西南的我的家...
    慧爺奔跑陽(yáng)光下閱讀 521評(píng)論 0 0
  • 經(jīng)常有人問(wèn)我脱吱,一個(gè)人的成熟與否最大的標(biāo)志是什么?我這里有一篇文章與大家分享认罩。 一個(gè)人最大的成熟就是能放下和原諒自己...
    半樸園閱讀 622評(píng)論 0 0