Android中的每一個Activity都是有或多或少的view組成的,如果view沒有層級和歸屬,每個view相互獨立。那么管理起來就會很麻煩,于是有了view層級的概念,也就是子布局,父容器。

10余年的建湖網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。成都營銷網(wǎng)站建設(shè)的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整建湖建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。成都創(chuàng)新互聯(lián)公司從事“建湖網(wǎng)站設(shè)計”,“建湖網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。
LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
!--人數(shù)顯示和刷新按鈕--
include layout="@layout/anfrag_title" /
!--時間選擇器--
include layout="@layout/anfrag_time_selector" /
!--所有新增用戶圖表顯示--
include layout="@layout/new_total_user_item" /
!--新增付費用戶圖表顯示--
include layout="@layout/new_vip_user_item" /
!--新增免費用戶圖表顯示--
include layout="@layout/new_free_user_item" /
!--新增用戶平臺付費率圖表顯示--
include layout="@layout/new_pay_percent_item" /
/LinearLayout
如上所述,LinearLayout就是相對的include的layout的父容器。
1 .FrameLayout簡介
設(shè)計FrameLayout是為了顯示單一項widget。通常,不建議使用FrameLayout顯示多項內(nèi)容;因為它們的布局很難調(diào)節(jié)。不用layout_gravity屬性的話,多項內(nèi)容會重疊;使用layout_gravity的話,能設(shè)置不同的位置。layout_gravity可以使用如下取值:
top :將對象放在其容器的頂部,不改變其大小.
bottom:將對象放在其容器的底部,不改變其大小.
left:將對象放在其容器的左側(cè),不改變其大小.
right:將對象放在其容器的右側(cè),不改變其大小.
center_vertical:將對象縱向居中,不改變其大小.
垂直對齊方式:垂直方向上居中對齊。
fill_vertical:必要的時候增加對象的縱向大小,以完全充滿其容器.?
垂直方向填充
center_horizontal:將對象橫向居中,不改變其大小.?
水平對齊方式:水平方向上居中對齊
fill_horizontal:必要的時候增加對象的橫向大小,以完全充滿其容器.?
水平方向填充:center
將對象橫縱居中,不改變其大小.
fill:必要的時候增加對象的橫縱向大小,以完全充滿其容器.
clip_vertical:附加選項,用于按照容器的邊來剪切對象的頂部和/或底部的內(nèi)容. 剪切基于其縱向?qū)R設(shè)置:頂部對齊時,剪切底部;底部對齊時剪切頂部;除此之外剪切頂部和底部.
垂直方向裁剪
clip_horizontal
附加選項,用于按照容器的邊來剪切對象的左側(cè)和/或右側(cè)的內(nèi)容. 剪切基于其橫向?qū)R設(shè)置:左側(cè)對齊時,剪切右側(cè);右側(cè)對齊時剪切左側(cè);除此之外剪切左側(cè)和右側(cè).
水平方向裁剪
注意:?區(qū)分“android:gravity”和“android:layout_gravity”。
android:gravity ? :是對控件本身來說的,是用來設(shè)置“控件自身的內(nèi)容”應該顯示在“控件自身體積”的什么位置,默認值是左側(cè)。
android:layout_gravity :是相對于控件的父元素來說的,設(shè)置該控件在它的父元素的什么位置
2. FrameLayout示例
創(chuàng)建一個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)容比較長"
? ? ? ? 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
安卓是谷歌將它從開源linux上改造而來,依舊保持開源特性。為了應用開發(fā)者更多地開發(fā)安卓程序,自然也就保留了linux上的虛擬機機制。同時,安卓的目標是手機等移動終端,這些設(shè)備的處理器五花百門,而且開源安卓也會被各種深入定制,這同樣導致了安卓依然沿用了虛擬機機制來保持高兼容性。當然,這些華為研發(fā)了方舟編譯器,讓系統(tǒng)直接運行機器碼,以此來消除虛擬機帶來的弊端。
1、安卓的誕生過程決定了它會沿用linux的虛擬機
安卓系統(tǒng)最早并不是谷歌研發(fā)出來的,而是一家名叫Android的初創(chuàng)公司研發(fā)的。這家公司成立22個月后,就把原始Android雛形系統(tǒng)以4千萬美元的價格賣給了谷歌。 這個雛形原本就基于linux系統(tǒng)研發(fā)而來,自然里面也還是沿用了linux的虛擬機機制。
2、移動終端硬件廠商太多,也只能沿用虛擬機方式
谷歌拿到系統(tǒng)后,自己繼續(xù)研發(fā)Android系統(tǒng),在2007年還集合了84家當時一流的硬件廠商組成研發(fā)聯(lián)盟。整個研發(fā)依然還是基于linux開源系統(tǒng),但它解決了商業(yè)化的一個大難題。那就是,linux是開源系統(tǒng),是有GPL開源協(xié)議的。很多硬件廠家為了適配該系統(tǒng),必須將在上面研發(fā)的驅(qū)動程序公開,一旦公開驅(qū)動程序代碼就相當于公開了自己的硬件設(shè)計。而谷歌研發(fā)的Android系統(tǒng)解決了這個問題,它將驅(qū)動程序放置到了userspace里面,并讓它可以通過l內(nèi)核訪問硬件。同時,公開接口就可以讓硬件廠商編寫驅(qū)動程序。硬件廠商只需要提供驅(qū)動程序即可,不需要公開源代碼了。
這么多硬件廠商一起研發(fā),自然就會 面臨一個問題就是每個廠商的硬件都不同。這對Android生態(tài)發(fā)展來說是個必須解決的兼容性問題。最好的辦法依然是沿用linux的虛擬機機制 ,這樣Android的軟件作者就無需針對不同硬件重新開發(fā)軟件。只需要一次開發(fā)就可以在安卓系統(tǒng)上的虛擬機中運行。
3、華為的方舟編譯器
安卓的虛擬機機制在很大程度上解決了兼容性的問題,但是這種邊解釋邊執(zhí)行的方式,也降低了軟件的運行效率。這些年,華為在這方面的研發(fā)上花了大功夫,成功研制出了“方舟”編譯器。該編譯器就是為了解決這個問題而誕生的。如果軟件作者采用方舟編譯器重新編譯自己的程序。它的軟件就可以以機器碼的形式在安卓系統(tǒng)上高效運行,并且方舟編譯器還會對程序進行優(yōu)化。按照華為方面的數(shù)據(jù)顯示, 使用華為方舟編譯器編譯后的程序,操作流暢度提升24%,系統(tǒng)響應速度提升44%,第三方應用操作流暢度提升60%!
總結(jié)
Android沒有繞開虛擬機直接運行,是因為從它研發(fā)之初為了保持高兼容性,不得不沿用了虛擬機的機制。但在這些年,華為研發(fā)了“方舟”編譯器,就是為了解決這個問題。通過方舟編譯器編譯后的程序可以直接以機器碼的形式在安卓系統(tǒng)上運行,效率大大提高。
為了多點兒面試題[機智]
當初設(shè)計android的時候,設(shè)計人員只是軟件工程師,無法針對某個CPU(目前有的CPU框架intel,arm,mips,rsicv等)去開發(fā)。最好的是,我針對所有CPU都支持。
跨平臺,是指java語言編寫的程序,一次編譯后,可以在多個系統(tǒng)平臺上運行。
因為機器針對不同機器語言,有不同執(zhí)行邏輯。
就好比二進制000100,在arm里面是調(diào)用加法器,而riscv是調(diào)用乘法器一樣。所以,需要給這些不同平臺請個翻譯。而虛擬機就是起到翻譯作用。
這樣雖然增加了消耗(例如執(zhí)行同樣代碼,時間消耗上,c明顯由于java),但是可以某種意義上,把軟件,物理硬件分開了。軟件重點設(shè)計自己app,而硬件不斷增加CPU性能。
因為上層應用是 建立在 java 庫的基礎(chǔ)上,運行 java 庫 需要 java 虛擬機,調(diào)試模式,可以登錄到系統(tǒng)里,直接運行l(wèi)inux 命令,也可以下載運行 c程序。
啥叫Android不可以繞開虛擬機直接運行?Android本質(zhì)上是Linux的變種,它本身就是應用APP的虛擬機容器,Android源碼針對硬件平臺編譯之后,就是直接在CPU上運行的機器碼了,它的運行并不依賴于其他的虛擬機。
APP是JAVA打包的,倒是需要在Android的JVM里運行,畢竟要考慮跨平臺嘛。
ActivityThread.java就是一個應用程序,有main方法,是一個進程,就是靠虛擬機,沒有這個就沒有app。咋繞開,繞開就得不用這個,得從內(nèi)部更換成別的,都更換了那就不是簡單的事情了
因為java代碼必須編譯成機器語言才行,這時候就要接助虛擬機
在問為什么前,先問下是什么?Android是可以不依賴虛擬機運行的,只需要改一下重新編譯就好了。
系統(tǒng)就是這么設(shè)計的
舉個例子
LinearLayout
TextView?/
/LinearLayout
這個LinearLayout就是TextView的父容器啦,也就是相對這個控件或者布局而言,他的上一級就是父容器啦。容器就是用來裝東西的嘛,父就是父親嘛,上一個等級(生物學和物理學都出來了哈哈)
Android 的UI 可以分為兩類,一類叫做ViewGroup容器,一類叫做View視圖
View視圖:(TextView,Button,ImageView)都是常用常見的視圖.
ViewGroup容器:內(nèi)部可以承載、放置、添加View視圖
線性布局就是 從左到右 或 從上到下 按 順序排列 的一種布局。下面講一講LinearLayout的基礎(chǔ)屬性。
相對布局在擺放子視圖位置時,按照 指定的參考系 來擺放子視圖的位置, 默認以屏幕左上角(0,0)位置 作為 參考系 擺放位置
使用layout_below使得后面一個組件位于前面一個組件的下方
配合layout_toRightOf使得后面一個組件位于前面一個組件的右方
組件的默認位置都是左上角,組件之間可以重疊。像千層餅一樣,一層壓著一層 可以設(shè)置上下左右的對齊、水平垂直居中、設(shè)置方式與線性布局相似
參考: 2021Android從零入門到實戰(zhàn)(Kotlin版)
網(wǎng)站名稱:android容器,android容器控件
網(wǎng)頁路徑:http://chinadenli.net/article11/dsgdogd.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、云服務器、響應式網(wǎng)站、自適應網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)