真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

android布局詳解,android主流布局

android的界面布局方式有哪些

一、??界面布局之線性布局(LinearLayout)

成都創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比遷安網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式遷安網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋遷安地區(qū)。費(fèi)用合理售后完善,十余年實(shí)體公司更值得信賴。

這種布局比較常用,也比較簡(jiǎn)單,就是每個(gè)元素占一行,把它按照橫向排放,也就是每個(gè)元素占一列。在布局中都按照垂直或者水平的順序依次排列子元素,每一個(gè)子元素都位于前一個(gè)元素之后。

二、??界面布局之相對(duì)布局(RelativeLayout)

相對(duì)布局是android界面設(shè)計(jì)中比較常用和好用的一個(gè)布局方式。

三、??界面布局之表格布局(TableLayout)

表格布局采用行、列的形式來(lái)管理元素組件。TableLayout的行和列不需要聲明,而是采用添加方法控制。

每次在TableLayout中添加一個(gè)TableRow,一個(gè)TableRow就代表表格中的一行,也同樣是容器,往里面添加一個(gè)子組件就代表增加一列。在表格布局中,列的寬度由最寬的那個(gè)單元格決定,整個(gè)表格布局寬度取決于父容器的寬度

四、??界面布局之絕對(duì)布局(AbsoluteLayout)

特點(diǎn):以坐標(biāo)的方式來(lái)定位在屏幕上的位置,引起缺乏靈活性,在沒(méi)有絕對(duì)定位的情況下相比其他類型的布局更難維護(hù)

五、??界面布局之幀布局(FrameLayout)

FrameLayout是五大布局中最簡(jiǎn)單的一個(gè)布局。在幀布局中,整個(gè)界面被當(dāng)成一塊空白備用區(qū)域,所有的子元素都不能被指定放置的位置,它們統(tǒng)統(tǒng)放于這塊區(qū)域的左上角,并且后面的子元素直接覆蓋在前面的子元素之上,將前面的子元素部分和全部遮擋。

轉(zhuǎn)自長(zhǎng)沙軟件公司---小房子

android中常見(jiàn)的五種布局有什么特點(diǎn)

1,F(xiàn)rameLayout,特點(diǎn):所有的View都會(huì)放在左上角,并且后添加進(jìn)去的View會(huì)覆蓋之前放進(jìn)去的View。

2,LinearLayout,特點(diǎn):在水平或者垂直方向上依次按照順序來(lái)排列子元素,控件的排列順序遵循其在布局文件中被寫出的先后順序。

3,RelativeLayout,特點(diǎn):以某一個(gè)子元素為參照物,其余子元素均按照其相對(duì)位置來(lái)完成布局。

4,TableLayout,特點(diǎn):每個(gè)TableLayout都是由一個(gè)或多個(gè)TableRow組成的,一個(gè)TableRow就代表TableLayout的一行。

5,AbsoluteLayout,表格布局類似Html里面的Table。每一個(gè)TableLayout里面有表格行TableRow,TableRow里面可以具體定義每一個(gè)元素,設(shè)定他的對(duì)齊方式 android:gravity="" 。

擴(kuò)展資料:

開放性:

在優(yōu)勢(shì)方面,Android平臺(tái)首先就是其開放性,開發(fā)的平臺(tái)允許任何移動(dòng)終端廠商加入到Android聯(lián)盟中來(lái)。顯著的開放性可以使其擁有更多的開發(fā)者,隨著用戶和應(yīng)用的日益豐富,一個(gè)嶄新的平臺(tái)也將很快走向成熟。

開放性對(duì)于Android的發(fā)展而言,有利于積累人氣,這里的人氣包括消費(fèi)者和廠商,而對(duì)于消費(fèi)者來(lái)講,最大的受益正是豐富的軟件資源。開放的平臺(tái)也會(huì)帶來(lái)更大競(jìng)爭(zhēng),如此一來(lái),消費(fèi)者將可以用更低的價(jià)位購(gòu)得心儀的手機(jī)。

豐富的硬件:

這一點(diǎn)還是與Android平臺(tái)的開放性相關(guān),由于Android的開放性,眾多的廠商會(huì)推出千奇百怪,功能特色各具的多種產(chǎn)品。功能上的差異和特色,卻不會(huì)影響到數(shù)據(jù)同步、甚至軟件的兼容,如同從諾基亞Symbian風(fēng)格手機(jī)一下改用蘋果iPhone,同時(shí)還可將Symbian中優(yōu)秀的軟件帶到iPhone上使用、聯(lián)系人等資料更是可以方便地轉(zhuǎn)移。

參考資料:百度百科——Android

android布局控件之LinearLayout詳解

Android布局控件之LinearLayout詳解

LinearLayout是線性布局控件,它包含的子控件將以橫向或豎向的方式排列,按照相對(duì)位置來(lái)排列所有的widgets或者其他的containers,超過(guò)邊界時(shí),某些控件將缺失或消失。因此一個(gè)垂直列表的每一行只會(huì)有一個(gè)widget或者是container,而不管他們有多寬,而一個(gè)水平列表將會(huì)只有一個(gè)行高(高度為最高子控件的高度加上邊框高度)。LinearLayout保持其所包含的widget或者是container之間的間隔以及互相對(duì)齊(相對(duì)一個(gè)控件的右對(duì)齊、中間對(duì)齊或者左對(duì)齊)。

xml屬性

android:baselineAligned:是否允許用戶調(diào)整它內(nèi)容的基線。

android:baselineAlignedChildIndex:當(dāng)一個(gè)線性布局與另一個(gè)布局是按基線對(duì)齊的一部分,它可以指定其內(nèi)容的基線對(duì)齊方式。

android:gravity:指定如何在該對(duì)象中放置此對(duì)象的內(nèi)容(x/y坐標(biāo)值)。

android:orientation:設(shè)置它內(nèi)容的對(duì)其方向(橫向/豎向)。

gravity 這個(gè)英文單詞是重心的意思,在這里就表示??课恢玫囊馑?。

android:layout_gravity 和 android:gravity 的區(qū)別

從名字上可以看到,android:gravity是對(duì)元素本身說(shuō)的,元素本身的文本顯示在什么地方靠著換個(gè)屬性設(shè)置,不過(guò)不設(shè)置默認(rèn)是在左側(cè)的。

android:layout_gravity是相對(duì)與它的父元素說(shuō)的,說(shuō)明元素顯示在父元素的什么位置。

比如說(shuō)button:android:layout_gravity 表示按鈕在界面上的位置。 android:gravity表示button上的字在button上的位置。

可選值

這兩個(gè)屬性可選的值有:top、bottom、left、right、center_vertical、fill_vertical、center_horizontal、fill_horizontal、center、fill、clip_vertical。

而且這些屬性是可以多選的,用“|”分開。

默認(rèn)這個(gè)的值是:Gravity.LEFT

LinearLayout還支持為其包含的widget或者是container指定填充權(quán)值。好處就是允許其包含的widget或者是container可以填充屏幕上的剩余空間。這也避免了在一個(gè)大屏幕中,一串widgets或者是containers擠成一堆的情況,而是允許他們放大填充空白。剩余的空間會(huì)按這些widgets或者是containers指定的權(quán)值比例分配屏幕。默認(rèn)的 weight 值為0,表示按照widgets或者是containers實(shí)際大小來(lái)顯示,若高于0的值,則將Container剩余可用空間分割,分割大小具體取決于每一個(gè)widget或者是container的layout_weight及該權(quán)值在所有widgets或者是containers中的比例。例如,如果有三個(gè)文本框,其中兩個(gè)指定的權(quán)值為1,那么,這兩個(gè)文本框?qū)⒌缺壤胤糯?,并填滿剩余的空間,而第三個(gè)文本框不會(huì)放大,按實(shí)際大小來(lái)顯示。如果前兩個(gè)文本框的取值一個(gè)為2,一個(gè)為1,顯示第三個(gè)文本框后剩余的空間的2/3給權(quán)值為2的,1/3大小給權(quán)值為1的。也就是權(quán)值越大,重要度越大。

如果LinearLayout包含子LinearLayout,子LinearLayout之間的權(quán)值越大的,重要度則越小。如果有LinearLayout A包含LinearLayout C,D,C的權(quán)值為2,D的權(quán)值為1,則屏幕的2/3空間分給權(quán)值為1的D,1/3分給權(quán)值為2的C。在LinearLayout嵌套的情況下,子LinearLayout必須要設(shè)置權(quán)值,否則默認(rèn)的情況是未設(shè)置權(quán)值的子LinearLayout占據(jù)整個(gè)屏幕

Android 布局之FrameLayout

1 .FrameLayout簡(jiǎn)介

設(shè)計(jì)FrameLayout是為了顯示單一項(xiàng)widget。通常,不建議使用FrameLayout顯示多項(xiàng)內(nèi)容;因?yàn)樗鼈兊牟季趾茈y調(diào)節(jié)。不用layout_gravity屬性的話,多項(xiàng)內(nèi)容會(huì)重疊;使用layout_gravity的話,能設(shè)置不同的位置。layout_gravity可以使用如下取值:

top :將對(duì)象放在其容器的頂部,不改變其大小.

bottom:將對(duì)象放在其容器的底部,不改變其大小.

left:將對(duì)象放在其容器的左側(cè),不改變其大小.

right:將對(duì)象放在其容器的右側(cè),不改變其大小.

center_vertical:將對(duì)象縱向居中,不改變其大小.

垂直對(duì)齊方式:垂直方向上居中對(duì)齊。

fill_vertical:必要的時(shí)候增加對(duì)象的縱向大小,以完全充滿其容器.?

垂直方向填充

center_horizontal:將對(duì)象橫向居中,不改變其大小.?

水平對(duì)齊方式:水平方向上居中對(duì)齊

fill_horizontal:必要的時(shí)候增加對(duì)象的橫向大小,以完全充滿其容器.?

水平方向填充:center

將對(duì)象橫縱居中,不改變其大小.

fill:必要的時(shí)候增加對(duì)象的橫縱向大小,以完全充滿其容器.

clip_vertical:附加選項(xiàng),用于按照容器的邊來(lái)剪切對(duì)象的頂部和/或底部的內(nèi)容. 剪切基于其縱向?qū)R設(shè)置:頂部對(duì)齊時(shí),剪切底部;底部對(duì)齊時(shí)剪切頂部;除此之外剪切頂部和底部.

垂直方向裁剪

clip_horizontal

附加選項(xiàng),用于按照容器的邊來(lái)剪切對(duì)象的左側(cè)和/或右側(cè)的內(nèi)容. 剪切基于其橫向?qū)R設(shè)置:左側(cè)對(duì)齊時(shí),剪切右側(cè);右側(cè)對(duì)齊時(shí)剪切左側(cè);除此之外剪切左側(cè)和右側(cè).

水平方向裁剪

注意:?區(qū)分“android:gravity”和“android:layout_gravity”。

android:gravity ? :是對(duì)控件本身來(lái)說(shuō)的,是用來(lái)設(shè)置“控件自身的內(nèi)容”應(yīng)該顯示在“控件自身體積”的什么位置,默認(rèn)值是左側(cè)。

android:layout_gravity :是相對(duì)于控件的父元素來(lái)說(shuō)的,設(shè)置該控件在它的父元素的什么位置

2. FrameLayout示例

創(chuàng)建一個(gè)activity,包含2組FrameLayout:1組設(shè)置android:layout_gravity屬性,另1組不設(shè)置android:layout_gravity屬性。

layout文件

?xml version="1.0" encoding="utf-8"?

LinearLayout xmlns:android=""

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical"

!-- 示例1 FrameLayout內(nèi)容重疊 --

TextView

? ? android:text="示例1, FrameLayout內(nèi)容重疊"

? ? android:layout_width="wrap_content"

? ? android:layout_height="wrap_content"

? ? /

FrameLayout

? ? android:layout_width="300dp"

? ? android:layout_height="80dp"

? ? TextView

? ? ? ? android:layout_width="wrap_content"

? ? ? ? android:layout_height="wrap_content"

? ? ? ? android:text="我是TextView,內(nèi)容比較長(zhǎng)"

? ? ? ? android:background="#ff0000"/

? ? Button

? ? ? ? android:layout_width="wrap_content"

? ? ? ? android:layout_height="wrap_content"

? ? ? ? android:background="#ffff00"

? ? ? ? android:text="我是按鈕"/

/FrameLayout

!-- 示例2 FrameLayout使用layout_gravity屬性 --

TextView

? ? android:text="示例2, 設(shè)置layout_gravity"

? ? android:layout_width="wrap_content"

? ? android:layout_height="wrap_content"

? ? /

FrameLayout

? ? android:layout_width="300dp"

? ? android:layout_height="120dp"

? ? TextView

? ? ? ? android:layout_width="wrap_content"

? ? ? ? android:layout_height="wrap_content"

? ? ? ? android:text="文本居左"

? ? ? ? android:background="#ff0000"

? ? ? ? android:gravity="center"

? ? ? ? android:layout_gravity="left"

? ? ? ? android:layout_margin="10dp"/

? ? TextView

? ? ? ? android:layout_width="wrap_content"

? ? ? ? android:layout_height="wrap_content"

? ? ? ? android:text="文本居中"

? ? ? ? android:background="#ffff00"

? ? ? ? android:gravity="center"

? ? ? ? android:layout_gravity="center"/

/FrameLayout

/LinearLayout

關(guān)于Android布局你不知道的

Android常見(jiàn)的5個(gè)布局,我想大家一定不會(huì)陌生。LinearLayout、RelativeLayout和FrameLayout也是使用頻率較高的布局方式,做Android開發(fā)的一定使用過(guò)。

傳統(tǒng)的5種布局方式:

不過(guò)我的問(wèn)題并不是問(wèn)面試者如何使用這些基礎(chǔ)的布局,而是要看面試者怎么解決布局嵌套(影響性能)和屏幕適配問(wèn)題。

我們都清楚Android界面的布局太復(fù)雜,嵌套層次過(guò)深,會(huì)使整個(gè)界面的測(cè)量、布局和繪制變得更復(fù)雜,對(duì)性能會(huì)造成影響。所以我們?cè)趯慙ayout文件時(shí),也要盡量避免布局的嵌套層次過(guò)深的問(wèn)題。

在怎么解決問(wèn)題之前,我們得有一個(gè)好方法先判斷當(dāng)前的問(wèn)題情況。Android SDK工具箱中有一個(gè)叫做Hierarchy Viewer的工具,能夠在App運(yùn)行時(shí)分析Layout。

注意: 在ROOT的手機(jī),或者是安裝開發(fā)版的ROM的手機(jī)可以直接使用Hierarchy Viewer。如果沒(méi)有Root的手機(jī)(SDK 4.1及以上),需要在你的PC端添加一個(gè)環(huán)境變量“ANDROID_HVPROTO=ddm”。

下面列舉一些面試者常使用的方式。

merge merge標(biāo)簽的作用是合并UI布局,使用該標(biāo)簽?zāi)芙档蚒I布局的嵌套層次。

merge標(biāo)簽可用于兩種情況:

ViewStub ViewStub標(biāo)簽引入的布局默認(rèn)不會(huì)inflate,既不會(huì)顯示也不會(huì)占用位置。 ViewStub常用來(lái)引入那些默認(rèn)不會(huì)顯示,只在特殊情況下顯示的布局,如數(shù)據(jù)加載進(jìn)度布局、出錯(cuò)提示布局等。

需要在使用時(shí)手動(dòng)inflate:

ViewStub在一定的程度可以起到減少嵌套層次的作用,特別是很多時(shí)候我們的程序可能不需要走到ViewStub的界面。

include 將可復(fù)用的組件抽取出來(lái)并通過(guò)include標(biāo)簽使用,但include標(biāo)簽?zāi)軠p少布局的層次嗎?

我認(rèn)為不能。include主要解決的是相同布局的復(fù)用問(wèn)題,它并不能減少布局的層次。

用RelativeLayout代替LinearLayout

很多人為了減少布局層次喜歡用RelativeLayout代替LinearLayout,不過(guò)可能達(dá)到的效果并不會(huì)很明顯。層次是減少了,但本身RelativeLayout就會(huì)比LinearLayout性能差一點(diǎn)。

有一些界面,比如一個(gè)圖片和一個(gè)文本的布局(ListItem常見(jiàn)的布局方式),可以利用TextView有drawableLeft, drawableRight等屬性,完全不需要RelativeLayout或者LinearLayout布局。

傳統(tǒng)的布局方式存在一定的缺陷,如RelativeLayout要兩次測(cè)量(measure)它的子View才能知道確切的高度;如果LinearLayout布局的子View有設(shè)置了layout_weight,那么它也需要測(cè)量?jī)纱尾拍塬@得布局的高度。

相對(duì)于傳統(tǒng)的布局方式,Android官方還推出了兩種新的布局方式:ConstraintLayout和FlexboxLayout。

ConstraintLayout ConstraintLayout即約束布局,在2016年由Google I/O推出。ConstraintLayout和RelativeLayout有點(diǎn)類似,控件之間根據(jù)依賴關(guān)系而存在,但比RelativeLayout更加靈活。創(chuàng)建大型復(fù)雜的布局仍然可以使用扁平的層級(jí)(不用嵌套View Group),說(shuō)的簡(jiǎn)單些就是,再?gòu)?fù)雜的界面也可以只有2層層次。

要使用ConstraintLayout需要在build.gradle中添加相關(guān)的support庫(kù):

使用ConstraintLayout可以有效的解決布局嵌套過(guò)多導(dǎo)致的性能問(wèn)題,官方也對(duì)其渲染性能進(jìn)行了優(yōu)化,并且ConstraintLayout支持可視化的方式編寫布局。

不過(guò)學(xué)會(huì)熟練使用ConstraintLayout會(huì)需要一點(diǎn)時(shí)間,但這是值得的。

FlexBoxLayout 做過(guò)前端開發(fā)(CSS方面)的同學(xué)對(duì)FlexBox一定不會(huì)陌生,最近我在做微信小程序開發(fā)時(shí)也涉及到FlexBox。FlexBox(彈性布局)是w3c在2009年提出的一種新的布局方案,解決以前那種傳統(tǒng)css的盒模型的局限性。

Google開源了FlexboxLayout布局和前端CSS FlexBox布局具有相同的功能(肯定有不一樣的地方),但已經(jīng)足夠在Android上改進(jìn)布局的構(gòu)建方式。

FlexBoxLayout可以理解成一種更高級(jí)的LinearLayout,不過(guò)比LinearLayout更加強(qiáng)大和靈活。如果我們使用LinearLayout布局的話,那么不同的分辨率,也許我們要重新調(diào)整布局,勢(shì)必會(huì)需要跟多的布局文件放在不同的資源目錄。而使用FlexBoxLayout來(lái)布局的話,它可以適應(yīng)各種界面的改變(所以叫響應(yīng)式布局)。

如果對(duì)前端的Flexbox不太了解的話,你還需要補(bǔ)一些概念,好在這些東西在網(wǎng)上很容易找到。

可能很多讀者會(huì)覺(jué)這樣的面試題是吹毛求疵,很多項(xiàng)目中哪有這么復(fù)雜的界面,根本就用不到這些優(yōu)化措施。

可以說(shuō)厲害的人,或者叫高手,可能只是比較多在意這些細(xì)節(jié)而已。在實(shí)踐中的經(jīng)歷告訴我,很多難于解決的性能問(wèn)題,并不是因?yàn)橛幸粋€(gè)影響性能的問(wèn)題無(wú)法攻克,而是沒(méi)有一個(gè)明顯的制約因素,是有各種小問(wèn)題一點(diǎn)一點(diǎn)堆積起來(lái),最終積重難返。

所以,把細(xì)節(jié)做好,或者意識(shí)到細(xì)節(jié)的地方可能引發(fā)的問(wèn)題,對(duì)我們解決問(wèn)題是很有幫助的,不要浪費(fèi)了讓你可以成長(zhǎng)的細(xì)節(jié)。

有需要更多Android高級(jí)進(jìn)階和面試資料的朋友可以私信我獲取


網(wǎng)站名稱:android布局詳解,android主流布局
文章URL:http://weahome.cn/article/hodggd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部