android開發布局
❶ Android的五大布局
1.RelativeLayout 相對布局
2. LinearLayout 線性布局
3. FrameLayout 幀布局
4.TableLayout 表格布局 (被GridView代替)
5.AbsoluteLayoutf 絕對布局(已經被谷歌廢棄,幾乎不會用到)
相對布局RelativeLayout允許子元素指定它們相對於其父元素或兄弟元素的位置,這是實際布局中最常用的布局方式之一。
特點:相對於其他空間的位置,和相對父元素的位置進行布局;
layout_centerHorizontal(相當於父節點是水平居中)
layout_centerVertical(相當於父節點是垂直居中)
layout_centerInParent(相當於父節點在正中間)
layout_above(在XX之上)
layout_below(在XX之下)
layout_toLeft(在XX的左邊)
layout_toRight(在XX的右邊)
layout_alignParentTop(和父節點的頂部對齊)
layout_alignParentBottom(和父節點的底部對齊)
layout_alignParentLeft(和父節點的左邊對齊)
layout_alignParentRight(和父節點的右邊對齊)
layout_alignTop(和XXX頂部對齊)
layout_alignBottom(和XXX底部對齊)
layout_alignLeft (和XXX左邊對齊)
layout_alignRight(和XXX右邊對齊)
線性布局LinearLayout是根據指定朝向orientation水平Horizontal或者垂直Vertical方向排列的布局,其最大的特點是可以給子控制項按照權重weight屬性分配空間.
常見案例:計算器
3. FrameLayout 幀布局
通俗的講就是在屏幕上一層覆蓋著一層的控制項,在fragment中比較常用
<TextView
android:layout_width= "200px"
android:layout_height= "200px"
android:layout_gravity= "center"
android:background= "#00ff00"
android:gravity= "center" />
❷ Android中常用的五種布局
Android
布局是應用界面開發的重要一環,在Android中,共有五種布局方式分別是:
線性布局:LinerLayout
表格布局:TableLayout
相對布局:RelativeLayout
絕對布局:AbsoluteLayout
幀布局:FrameLayout
❸ Android中常用的五種布局
常用五種布局方式,分別是:FrameLayout(框架布局),LinearLayout (線性布局),AbsoluteLayout(絕對布局),RelativeLayout(相對布局),TableLayout(表格布局)。
LinearLayout裡面又可分為垂直布局(android:orientation="vertical")和水平布局(android:orientation="horizontal" )
❹ Android基礎之常用五種布局
所有東西依次都放在左上角,會重疊,這個布局比較簡單,也只能放一點比較簡單的東西。
分為垂直布局( android:orientation="vertical" )和水平布局( android:orientation="horizontal" )。
垂直布局時,每一行就只有一個元素,多個元素依次垂直往下;
水平布局時,只有一行,每一個元素依次向右排列。
用X,Y坐標來指定元素的位置,這種布局方式也比較簡單
在屏幕旋轉時,往往會出問題,而且多個元素的時候,計算比較麻煩。
可以理解為某一個元素為參照物,來定位的布局方式。
主要屬性有:
相對於某一個元素 android:layout_below 、 android:layout_toLeftOf
相對於父元素的地方 android:layout_alignParentLeft 、 android:layout_alignParentRigh ;
每一個 TableLayout 裡面有表格行 TableRow , TableRow 裡面可以具體定義每一個元素。每一個布局都有自己適合的方式,這五個布局元素可以相互嵌套應用,做出美觀的界面。
❺ 關於Android布局你不知道的
Android常見的5個布局,我想大家一定不會陌生。LinearLayout、RelativeLayout和FrameLayout也是使用頻率較高的布局方式,做Android開發的一定使用過。
傳統的5種布局方式:
不過我的問題並不是問面試者如何使用這些基礎的布局,而是要看面試者怎麼解決布局嵌套(影響性能)和屏幕適配問題。
我們都清楚Android界面的布局太復雜,嵌套層次過深,會使整個界面的測量、布局和繪制變得更復雜,對性能會造成影響。所以我們在寫Layout文件時,也要盡量避免布局的嵌套層次過深的問題。
在怎麼解決問題之前,我們得有一個好方法先判斷當前的問題情況。Android SDK工具箱中有一個叫做Hierarchy Viewer的工具,能夠在App運行時分析Layout。
注意: 在ROOT的手機,或者是安裝開發版的ROM的手機可以直接使用Hierarchy Viewer。如果沒有Root的手機(SDK 4.1及以上),需要在你的PC端添加一個環境變數「ANDROID_HVPROTO=ddm」。
下面列舉一些面試者常使用的方式。
merge merge標簽的作用是合並UI布局,使用該標簽能降低UI布局的嵌套層次。
merge標簽可用於兩種情況:
ViewStub ViewStub標簽引入的布局默認不會inflate,既不會顯示也不會佔用位置。 ViewStub常用來引入那些默認不會顯示,只在特殊情況下顯示的布局,如數據載入進度布局、出錯提示布局等。
需要在使用時手動inflate:
ViewStub在一定的程度可以起到減少嵌套層次的作用,特別是很多時候我們的程序可能不需要走到ViewStub的界面。
include 將可復用的組件抽取出來並通過include標簽使用,但<include>標簽能減少布局的層次嗎?
我認為不能。include主要解決的是相同布局的復用問題,它並不能減少布局的層次。
用RelativeLayout代替LinearLayout
很多人為了減少布局層次喜歡用RelativeLayout代替LinearLayout,不過可能達到的效果並不會很明顯。層次是減少了,但本身RelativeLayout就會比LinearLayout性能差一點。
有一些界面,比如一個圖片和一個文本的布局(ListItem常見的布局方式),可以利用TextView有drawableLeft, drawableRight等屬性,完全不需要RelativeLayout或者LinearLayout布局。
傳統的布局方式存在一定的缺陷,如RelativeLayout要兩次測量(measure)它的子View才能知道確切的高度;如果LinearLayout布局的子View有設置了layout_weight,那麼它也需要測量兩次才能獲得布局的高度。
相對於傳統的布局方式,Android官方還推出了兩種新的布局方式:ConstraintLayout和FlexboxLayout。
ConstraintLayout ConstraintLayout即約束布局,在2016年由Google I/O推出。ConstraintLayout和RelativeLayout有點類似,控制項之間根據依賴關系而存在,但比RelativeLayout更加靈活。創建大型復雜的布局仍然可以使用扁平的層級(不用嵌套View Group),說的簡單些就是,再復雜的界面也可以只有2層層次。
要使用ConstraintLayout需要在build.gradle中添加相關的support庫:
使用ConstraintLayout可以有效的解決布局嵌套過多導致的性能問題,官方也對其渲染性能進行了優化,並且ConstraintLayout支持可視化的方式編寫布局。
不過學會熟練使用ConstraintLayout會需要一點時間,但這是值得的。
FlexBoxLayout 做過前端開發(CSS方面)的同學對FlexBox一定不會陌生,最近我在做微信小程序開發時也涉及到FlexBox。FlexBox(彈性布局)是w3c在2009年提出的一種新的布局方案,解決以前那種傳統css的盒模型的局限性。
Google開源了FlexboxLayout布局和前端CSS FlexBox布局具有相同的功能(肯定有不一樣的地方),但已經足夠在Android上改進布局的構建方式。
FlexBoxLayout可以理解成一種更高級的LinearLayout,不過比LinearLayout更加強大和靈活。如果我們使用LinearLayout布局的話,那麼不同的解析度,也許我們要重新調整布局,勢必會需要跟多的布局文件放在不同的資源目錄。而使用FlexBoxLayout來布局的話,它可以適應各種界面的改變(所以叫響應式布局)。
如果對前端的Flexbox不太了解的話,你還需要補一些概念,好在這些東西在網上很容易找到。
可能很多讀者會覺這樣的面試題是吹毛求疵,很多項目中哪有這么復雜的界面,根本就用不到這些優化措施。
可以說厲害的人,或者叫高手,可能只是比較多在意這些細節而已。在實踐中的經歷告訴我,很多難於解決的性能問題,並不是因為有一個影響性能的問題無法攻克,而是沒有一個明顯的制約因素,是有各種小問題一點一點堆積起來,最終積重難返。
所以,把細節做好,或者意識到細節的地方可能引發的問題,對我們解決問題是很有幫助的,不要浪費了讓你可以成長的細節。
有需要更多Android高級進階和面試資料的朋友可以私信我獲取