www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 芯聞號 > 充電吧
[導(dǎo)讀]隨著android手機(jī)的迅速發(fā)展以及技術(shù)的更新,市場對應(yīng)用的性能提出了更高的要求,android圖形界面是用戶最直接的感受渠道,因此做好UI界面的設(shè)計日益重要。而其實(shí)相同的布局效果可以有不同的實(shí)現(xiàn)方式

隨著android手機(jī)的迅速發(fā)展以及技術(shù)的更新,市場對應(yīng)用的性能提出了更高的要求,android圖形界面是用戶最直接的感受渠道,因此做好UI界面的設(shè)計日益重要。而其實(shí)相同的布局效果可以有不同的實(shí)現(xiàn)方式。糟糕的布局會使程序加載UI的速度非常慢,從而降低了用戶體驗(yàn)滿意度,同時也對程序的性能產(chǎn)生比較大的影響,因此優(yōu)化布局是提高性能的一種重要途徑,以下從三方面講述布局的三重優(yōu)化。

第一重優(yōu)化:布局中樣式的抽取

布局文件中,系統(tǒng)給我們提供了很多控件的屬性,我們可以方便的使用,但有時在同一個布局中甚至不同的布局中會重復(fù)出現(xiàn)同一個控件并且其屬性設(shè)置相似,這時如果我們重復(fù)的單個定義相同控件的屬性會使布局代碼顯得龐大冗雜,減低了布局文件的可讀性同時開發(fā)的效率和程序性能也會受很大的影響,這就需要我們將相同控件的相同屬性抽取出來做成樣式模板。

舉例1:

同一個布局或不同布局文件中常常會用到控件顯示文字比如TextView,Button等,而這時候?qū)τ诳丶拇笮〖帮@示的文字的大小和顏色等要求又是相同的,這時我們就可以將這些相同的屬性抽取出來。如下圖布局是一個簡單的LinearLayout布局中的三個控件中間一個Button,兩邊各一個TextView,看代碼不難發(fā)現(xiàn)他們的尺寸,背景,和字體大小顏色都是相同的,這時我們則可以抽取出來。

第二重優(yōu)化:布局文件復(fù)用

布局文件的復(fù)用思想和樣式抽取的思想是相同的,都是將相同的東西抽取出來以達(dá)到可以重復(fù)利用的目的。當(dāng)然Android也已經(jīng)充分考慮到了布局重用的重要性,于是提供了和這兩個非常有用的標(biāo)簽,讓我們更方便的實(shí)現(xiàn)代碼復(fù)用。

1.include

標(biāo)簽可以允許在一個布局當(dāng)中引入另外一個布局,那么比如說我們程序的所有界面都有一個公共的部分,這個時候最好的做法就是將這個公共的部分提取到一個獨(dú)立的布局文件當(dāng)中,然后在每個界面的布局文件當(dāng)中來引用這個公共的布局。

舉例2:我們應(yīng)該都知道,目前幾乎所有的軟件都會有一個頭布局,頭布局中可以包含界面的標(biāo)題、返回按鈕、以及其它一些操作功能等。那這樣的一個頭布局,有些軟件是使用ActionBar來實(shí)現(xiàn)的,但是由于ActionBar的靈活性不太好,因而也有很多軟件會選擇自己去編寫實(shí)現(xiàn)。那如果自己去實(shí)現(xiàn)的話,由于這個頭布局是在所有界面都要使用的,顯然我們不可能在每個界面當(dāng)中都去寫一遍這個頭布局的代碼,因此這種情況下使用標(biāo)簽就非常合適了。這里為了給大家演示一下,我就編寫一個非常簡單的頭布局,在res/layout文件夾中新建titlebar.xml作為頭布局,代碼如下所示:


titlebar.xml中的布局非常簡單,外層RelativeLayout里面只有兩個Button和一個TextView,左邊Button用于實(shí)現(xiàn)返回功能,右邊的Button用于實(shí)現(xiàn)完成功能,中間的TextView則可以用于顯示當(dāng)前界面的標(biāo)題。我們可以來預(yù)覽一下titlebar的樣子。


titlebar的布局寫完,接下來就可以對布局文件進(jìn)行復(fù)用了,無論任何界面需要加入titlebar這個功能,只需要在布局文件中引入titlebar.xml就可以了。


這樣就非常簡單,一行include語句就搞定了,而無需重復(fù)寫titlebar里的布局。標(biāo)簽當(dāng)中可以指定一個layout屬性,我們在這個layout屬性中填寫需要引入的布局名就可以了。而且使用這種引入的方式,以后如果titlebar的界面有所變更,我們只需要修改titlebar.xml這一個文件就可以了,而不是所有界面一個個地去修改。但需要注意的是雖然titlebar是成功引入了,但是我們activity_main.xml中本來的界面全部都不見了!出現(xiàn)這個問題的原因是因?yàn)閠itlebar的最外層布局是一個寬高都是match_parent的RelativeLayout,它會將整個布局都填充滿,因而我們原本的布局也就看不見了。那既然問題的原因清楚了,相信你立刻就想到應(yīng)該怎么修改了,將RelativeLayout的layout_height屬性修改成wrap_content不就可以了嘛。沒錯,這樣修改當(dāng)然是沒問題的,不過這種修改方式會讓所有引用titlebar的界面都受到影響,而如何你只希望讓activity_main.xml這一個界面受影響的話,那么可以使用覆寫屬性的方式。

在標(biāo)簽當(dāng)中,我們是可以覆寫所有l(wèi)ayout屬性的,即include中指定的layout屬性將會覆蓋掉titlebar中指定的layout屬性。因此,這里我們希望將titlebar的高度設(shè)置成wrap_content,就可以這樣寫:

這時重新運(yùn)行一下則是可以正常顯示titlebar之外的其他內(nèi)容的。



除了layout_height之外,我們還可以覆寫titlebar中的任何一個layout屬性,如layout_gravity、layout_margin等,而非layout屬性則無法在標(biāo)簽當(dāng)中進(jìn)行覆寫。另外需要注意的是,如果我們想要在標(biāo)簽當(dāng)中覆寫layout屬性,必須要將layout_width和layout_height這兩個屬性也進(jìn)行覆寫,否則覆寫效果將不會生效。

2.

標(biāo)簽是作為標(biāo)簽的一種輔助擴(kuò)展來使用的,他的主要作用是為了防止在引用布局文件時產(chǎn)生多余的布局嵌套。Android去解析和展示一個布局是需要消耗時間的,布局嵌套越多解析起來越是耗時,性能也就越差,因此我們在編寫布局文件時應(yīng)該讓嵌套的層數(shù)越少越好。

有優(yōu)點(diǎn),但是它也存在著一個不好的地方,就是可能會導(dǎo)致產(chǎn)生多余的布局嵌套。這里還是通過舉例的方式跟大家說明一下,比如說我們需要編寫一個確定取消按鈕的公共布局,這樣任何一個界面需要確定和取消功能時就不用再單獨(dú)編寫了,新建ok_cancel_layout.xml。

可以看到,這個界面也是非常簡單,外層是一個水平方向LinearLayout,LinearLayout中包含了兩個按鈕,一個用于實(shí)現(xiàn)確定功能,一個用于實(shí)現(xiàn)取消功能。現(xiàn)在我們可以來預(yù)覽一下這個界面。


然后我們有一個profile.xml的界面需要編輯一些內(nèi)容,那么這里就可以將ok_cancel_layout這個布局引入到profile.xml界面當(dāng)中。

這個看上去并沒有什么不對,可是在你毫無察覺的情況下,目profile.xml這個界面當(dāng)中其實(shí)已經(jīng)存在著多余的布局嵌套了!感覺還沒寫幾行代碼呢,怎么這就已經(jīng)有多余的布局嵌套了?我們可以通過View Hierarchy工具來查看一下。


可以看到,最外層首先是一個FrameLayout,然后FrameLayout中包含的是一個LinearLayout,這個就是我們在profile.xml中定義的最外層布局。接下來的部分就有問題了,在最外層的LinearLayout當(dāng)中包含了兩個元素,一個是EditText,另一個又是一個LinearLayout,然后在這個內(nèi)部的LinearLayout當(dāng)中才包含了確定和取消這兩個按鈕。這個內(nèi)部的LinearLayout就是一個多余的布局嵌套,實(shí)際上并不需要這樣一層,讓兩個按鈕直接包含在外部的LinearLayout當(dāng)中就可以了。而這個多余的布局嵌套其實(shí)就是由于布局引入所導(dǎo)致的,因?yàn)槲覀冊趏k_cancel_layout.xml中也定義了一個LinearLayout。那么應(yīng)該怎樣優(yōu)化掉這個問題呢?當(dāng)然就是使用標(biāo)簽來完成了,修改ok_cancel_layout.xml中的代碼,。


可以看到,這里我們將ok_cancel_layout最外層的LinearLayout布局刪除掉,換用了標(biāo)簽,這就表示當(dāng)有任何一個地方去include這個布局時,會將標(biāo)簽內(nèi)包含的內(nèi)容直接填充到include的位置,不會再添加任何額外的布局結(jié)構(gòu)。好的,的用法就是這么簡單,現(xiàn)在重新運(yùn)行一下程序,你會看到界面沒有任何改變,然后我們再通過View Hierarchy工具來查看一下當(dāng)前的View結(jié)構(gòu)。

第三重優(yōu)化:僅在需要時才加載布局

有的時候我們會遇到這樣的場景,就是某個布局當(dāng)中的元素非常多,但并不是所有元素都一起顯示出來的,而是普通情況下只顯示部分常用的元素,而那些不常用的元素只有在用戶進(jìn)行特定操作的情況下才會顯示出來。

這里舉個大家都非常熟悉的例子,我們在添加聯(lián)系人的時候其實(shí)可以編輯的字段真的非常多,姓名、電話、email、傳真、住址、昵稱等等等等,但其實(shí)基本上大家最常用的就是填一個姓名,填一個電話而已。那么將這么多繁雜的字段都一起顯示在界面上其實(shí)并不是一種很好的做法,因?yàn)榇蠖鄶?shù)人都是用不到這些字段的。比較聰明的做法就是把最常用的姓名和電話顯示在界面上,然后給用戶提供一個添加更多字段的選項(xiàng),當(dāng)用戶真的有需要去添加其它信息的時候,我們才將另外的元素顯示到界面上。

說到實(shí)現(xiàn)這樣一個功能,我相信大多數(shù)人的第一反應(yīng)就是將不常用的元素使用INVISIBLE或者GONE進(jìn)行隱藏,然后當(dāng)用戶需要使用這些元素的時候再把它們置成VISIBLE顯示出來。使用這種方式肯定可以實(shí)現(xiàn)功能的,但是性能方面就表現(xiàn)得一般了,因?yàn)榧词故菍⒃剡M(jìn)行隱藏,它們其實(shí)還是在布局當(dāng)中的,每個元素還擁有著自己的寬、高、背景等等屬性,解析布局的時候也會將這些隱藏的元素一一解析出來。

那么我們?nèi)绾尾拍茏屵@些不常用的元素僅在需要時才去加載呢?Android為此提供了一種非常輕量級的控件,ViewStub。ViewStub雖說也是View的一種,但是它沒有大小,沒有繪制功能,也不參與布局,資源消耗非常低,將它放置在布局當(dāng)中基本可以認(rèn)為是完全不會影響性能的。

下面我們就來學(xué)習(xí)一下如何使用ViewStub來完成僅在需要時才去加載布局的功能,目前profile.xml中只有一個EditText用于編輯信息,那么比如說我們還有另外三個不太常用的EditText,就可以將它們定義在另外一個布局文件當(dāng)中。新建profile_extra.xml文件。


目前profile_extra.xml是一個獨(dú)立的布局,和profile.xml這個布局文件是完全沒有關(guān)系的。接下來我們修改profile.xml文件中的代碼。


可以看到LinearLayout布局中我們新增了一個More Button,這個按鈕就是用于去加載那些不常用的元素的,然后在Button的下面定義了一個ViewStub。在ViewStub控件中,我們先是通過id屬性給它指定了一個唯一標(biāo)識,又通過layout屬性將profile_extra布局傳入進(jìn)來,接著給ViewStub指定了一個寬高。注意,雖然ViewStub是不占用任何空間的,但是每個布局都必須要指定layout_width和layout_height屬性,否則運(yùn)行就會報錯。

接著修改ProfileActivity中的代碼,在Activity中添加More Button的點(diǎn)擊事件,并在點(diǎn)擊事件中進(jìn)行如下邏輯處理。


當(dāng)點(diǎn)擊More Button之后我們首先會調(diào)用findViewById()方法將ViewStub的實(shí)例獲取到,拿到ViewStub的實(shí)例之后就很簡單了,調(diào)用inflate()方法或者setVisibility(View.VISIBLE)都可以將隱藏的布局給加載出來,而加載的這個布局就是剛才在XML當(dāng)中配置的profile_extra布局。

調(diào)用inflate()方法之后會將加載出來的布局進(jìn)行返回,之后我們就可以對這個布局進(jìn)行任意的操作了,再次隱藏顯示,或者獲取子元素的實(shí)例等。注意這里我對ViewStub的實(shí)例進(jìn)行了一個非空判斷,這是因?yàn)閂iewStub在XML中定義的id只在一開始有效,一旦ViewStub中指定的布局加載之后,這個id也就失敗了,那么此時findViewById()得到的值也會是空。

可以看到,界面上只有一個More按鈕,ViewStub是完全不占用任何空間的。然后點(diǎn)擊一下More按鈕。

運(yùn)行結(jié)果正常,profile_extra.xml中定義的布局已經(jīng)加載出來了,而且顯示的位置正是ViewStub控件定義的位置,說明我們已經(jīng)成功是實(shí)現(xiàn)了ViewStub的功能。但是需要注意的是ViewStub所加載的布局不能使用標(biāo)簽,也就是說包含ViewStub控件的布局在進(jìn)行復(fù)用時會導(dǎo)致加載出來的布局存在著多余的嵌套結(jié)構(gòu),但是對于含有較多隱藏子布局的布局文件來說,使用ViewStub還是一種相當(dāng)不錯的選擇的,即使增加了一層無用的布局結(jié)構(gòu),仍然還是利大于弊,具體如何去選擇就要具體情況具體分析了。對于性能的優(yōu)化需要考慮很多的方面,這里只是簡單的介紹了性能優(yōu)化中的布局優(yōu)化,作為一個開發(fā)者還需要有的放矢的選擇和權(quán)衡各種方法對應(yīng)用性能的影響,從而開發(fā)出性能優(yōu)越,客戶滿意度高的應(yīng)用。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉