2019-08-26 Day22 布局方式與圖像解鎖DEMO


目的

  • 了解Android布局防症,學習如何使用他們赌结,明白其布局方式
  • 使用所學布局知識吃环,完成圖像解鎖demo

Android布局

概念

布局就是主要把界面中的控件按照某種規(guī)律擺放在指定的位置羹饰;主要是為了解決應用程序在不同手機中的顯示問題

布局種類

  • AbsoluteLayout(絕對布局)
  • FrameLayout(框架布局/幀布局)
  • LinearLayout(線性布局)
  • RelativeLayout(相對布局)
  • TableLayout(表格布局)
  • ConstraintLayout(約束布局)
    今天所講解的是FrameLayout(框架布局/幀布局)伊滋、LinearLayout(線性布局)、RelativeLayout(相對布局)以及ConstraintLayout(約束布局)

幀布局 FrameLayout

幀布局是將所有的子元素放在整個界面的左上角队秩,后面的子元素直接覆蓋前面的子元素新啼,所以用的比較少

屬性

  • android:foreground: 設(shè)置改幀布局容器的前景圖像
  • android:foregroundGravity: 設(shè)置前景圖像顯示的位置

使用方法

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:orientation="horizontal">

    <View
        android:layout_width="300dp"
        android:layout_height="300dp"
        android:background="@color/colorAccent"
        />

    <View
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:background="@color/colorPrimary" 
        />
    
    <View
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:background="@color/colorPrimaryDark"/>
    

</FrameLayout>

效果如下:

image.png

線性布局 LinearLayout

線性布局是按照水平或垂直的順序?qū)⒆釉?可以是控件或布局)依次按照順序排列,每一個元素都位于前面一個元素之后

方向 Orientation

線性布局分為兩種——水平方向和垂直方向的布局
系統(tǒng)默認采用橫向布局

  • Vertical(豎向)
從左到右 
android:orientation=”horizontal”

代碼實例:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:orientation="vertical">

    <View
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:background="@color/colorAccent"/>

    <View
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:background="@color/colorPrimary"/>
</LinearLayout>

效果如下:


image.png
  • Horizontal(橫向)
從上到下 
android:orientation=”vertical”

代碼實例:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:orientation="horizontal">

    <View
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:background="@color/colorAccent"/>

    <View
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:background="@color/colorPrimary"/>
</LinearLayout>

效果如下:


image.png

對齊方式

線性布局里有兩種設(shè)置邊距的方式刹碾,分別是Margin和Padding
Margin:控件邊緣和其他控件的間距燥撞,即外間距
Padding:控件內(nèi)部內(nèi)容和控件自己邊緣的間距,即內(nèi)間距

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:orientation="horizontal">

    <View
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:background="@color/colorAccent"
        />

    <View
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:background="@color/colorPrimary"
        android:layout_marginLeft="100dp"
        android:layout_marginTop="100dp"/>

</LinearLayout>
image.png

紅色的箭頭表示的是Margin,而黑色的箭頭表示的是Padding迷帜;在線性布局中物舒,各個控件不會重疊,因為它們依照順序排布

權(quán)重 layout_weight

LinearLayout 支持使用 android:layout_weight 屬性為各個子視圖分配權(quán)重戏锹。此屬性根據(jù)視圖應在屏幕上占據(jù)的空間量向視圖分配“重要性”值冠胯。 權(quán)重值更大的視圖可以填充父視圖中任何剩余的空間。子視圖可以指定權(quán)重值锦针,然后系統(tǒng)會按照子視圖聲明的權(quán)重值的比例荠察,將視圖組中的任何剩余空間分配給子視圖。 默認權(quán)重為零奈搜。
android:layout_weight 表示子元素占據(jù)的空間大小的比例悉盆。分配權(quán)重值,其值越小馋吗,權(quán)重越大焕盟。

其計算方法大致如圖:

QQ圖片20190826211041.png

使用方法

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:orientation="horizontal">

    <View
        android:layout_width="wrap_content"
        android:layout_height="100dp"
        android:background="@color/colorAccent"
        android:layout_weight="1"/>

    <View
        android:layout_width="wrap_content"
        android:layout_height="100dp"
        android:background="@color/colorPrimary"
        android:layout_weight="2"/>
    
</LinearLayout>

效果如下:


image.png

相對布局 RelativeLayout

相對布局是在頁面內(nèi),以控件之間相對位置相對父容器位置進行排列宏粤。同時脚翘,必須確定控件的x和y坐標以及長和寬

注意:在引用其他子元素之前灼卢,引用的ID必須已經(jīng)存在,否則將出現(xiàn)異常来农。

屬性

image.png
image.png

使用方法

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <View
        android:id="@+id/iv_1"
        android:layout_width="300dp"
        android:layout_height="200dp"
        android:background="@color/colorAccent"
        />

    <View
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:background="@color/colorPrimary"
        android:layout_alignBottom="@id/iv_1"
        android:layout_alignEnd="@id/iv_1"
        />

</RelativeLayout>

效果如下:

image.png

約束布局 ConstraintLayout

約束布局ConstraintLayout 是一個ViewGroup鞋真,可以在Api9以上的Android系統(tǒng)使用它,它的出現(xiàn)主要是為了解決布局嵌套過多的問題沃于,以靈活的方式定位和調(diào)整小部件

屬性

image.png

使用方法

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <View
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="@color/colorAccent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        
        android:layout_marginLeft="20dp"
        android:layout_marginTop="20dp"
        android:layout_marginRight="20dp"
        android:layout_marginBottom="20dp"
        />
    

</androidx.constraintlayout.widget.ConstraintLayout>

效果如下:

image.png

不太確定控件的寬和高的時候涩咖,寫作0dp

寬高比例

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <View
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="@color/colorAccent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintDimensionRatio="w,1:2"

        android:layout_marginLeft="20dp"
        android:layout_marginTop="20dp"
        android:layout_marginRight="20dp"
        android:layout_marginBottom="20dp"
        />


</androidx.constraintlayout.widget.ConstraintLayout>

效果如下:


image.png

在app:layout_constraintDimensionRatio="a,1:2"中,如果a為w揽涮,就是高寬比;如果a為h饿肺,就是寬高比

平分寬度

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <View
        android:id="@+id/v1"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="@color/colorAccent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@id/v2"

        android:layout_marginLeft="20dp"
        android:layout_marginTop="20dp"
        android:layout_marginRight="20dp"
        android:layout_marginBottom="20dp"

        app:layout_constraintHorizontal_weight="1"
        />

    <View
        android:id="@+id/v2"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="@color/colorPrimary"

        app:layout_constraintTop_toTopOf="@id/v1"
        app:layout_constraintBottom_toBottomOf="@id/v1"

        app:layout_constraintStart_toEndOf="@id/v1"
        app:layout_constraintEnd_toEndOf="parent"

        app:layout_constraintHorizontal_weight="1"
        android:layout_marginRight="20dp"
        />
    
</androidx.constraintlayout.widget.ConstraintLayout>

效果如下:


image.png

心得體會

總算是把四個布局搞得比較清楚蒋困,也算會使用一些,但還是會有問題敬辣,繼續(xù)克服

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末雪标,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子溉跃,更是在濱河造成了極大的恐慌村刨,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件撰茎,死亡現(xiàn)場離奇詭異嵌牺,居然都是意外死亡,警方通過查閱死者的電腦和手機龄糊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門逆粹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人炫惩,你說我怎么就攤上這事僻弹。” “怎么了他嚷?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵蹋绽,是天一觀的道長。 經(jīng)常有香客問我筋蓖,道長卸耘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任粘咖,我火速辦了婚禮鹊奖,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘涂炎。我一直安慰自己忠聚,他們只是感情好设哗,可當我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著两蟀,像睡著了一般网梢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上赂毯,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天战虏,我揣著相機與錄音,去河邊找鬼党涕。 笑死烦感,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的膛堤。 我是一名探鬼主播手趣,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼肥荔!你這毒婦竟也來了绿渣?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤燕耿,失蹤者是張志新(化名)和其女友劉穎中符,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體誉帅,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡淀散,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蚜锨。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吧凉。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖踏志,靈堂內(nèi)的尸體忽然破棺而出阀捅,到底是詐尸還是另有隱情,我是刑警寧澤针余,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布饲鄙,位于F島的核電站,受9級特大地震影響圆雁,放射性物質(zhì)發(fā)生泄漏忍级。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一伪朽、第九天 我趴在偏房一處隱蔽的房頂上張望轴咱。 院中可真熱鬧,春花似錦、人聲如沸朴肺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽戈稿。三九已至西土,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鞍盗,已是汗流浹背需了。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留般甲,地道東北人肋乍。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像敷存,于是被迫代替她去往敵國和親墓造。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,941評論 2 355

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