1. 程式人生 > >android ConstraintLayout基礎系列之替換LinerLayout

android ConstraintLayout基礎系列之替換LinerLayout

它是什麼?

2016 年 Google I/O 大會上釋出 ConstraintLayout,
簡單來說,它是RelativeLaout,LinerLayout,percentLayout的升級版本,但是區別更加強調約束性(控制元件之間的關係),
它出現可以使巢狀佈局扁平化。方便的對多層巢狀佈局進行優化。

它能做什麼?

用白話說,RelativeLaout,LinerLayout,percentLayout能做的ConstraintLayout都能做,並且更容易,效能更優,減少佈局間的層次巢狀。它還能做一些
RelativeLaout,LinerLayout,percentLayout不能做的事情。總的來說就是幾種佈局組合升級版

接下來就開始ConstraintLayout的學習之旅

1.相對於LinerLayout 佈局。

LinearLayout 的基本用法就是將子元件 View 在水平或者垂直方向浮動對齊,基於屬性 orientation 來設定。那麼用
ConsstraintLayout 只需要新增約束,相對於其它view 約束。

     <Button
        android:id="@+id/id_btn03"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
android:text="moni" app:layout_constraintTop_toBottomOf="@+id/rl_layout" /> <Button android:layout_width="90dp" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:text="moni" app:layout_constraintLeft_toRightOf="@+id/id_btn03"
app:layout_constraintTop_toBottomOf="@+id/rl_layout" app:layout_constraintRight_toRightOf="parent" />

注意: 類似 layout_constraintTop_toBottomOf 這樣的陌生屬性

寫法

app:layout_constraint + 方位_to+相對View的方位+of=“相對viewId”

當前View 於 約束佈局之間的約束關係

水平方向或者垂直方向約束方式。

 圖片1

類似屬性

    layout_constraintRight_toLeftOf
    layout_constraintRight_toRightOf
    layout_constraintTop_toTopOf
    layout_constraintTop_toBottomOf
    layout_constraintBottom_toTopOf
    layout_constraintBottom_toBottomOf
    layout_constraintBaseline_toBaselineOf

2.如果想實現類似LinerLayout 的weight功能看怎麼實現呢?

看下Tab如何實現:

<TextView
    android:id="@+id/tab1"
    android:layout_width="0dp"
    android:layout_height="30dp"
    android:background="#f67"
    android:gravity="center"
    android:text="Tab1"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toLeftOf="@+id/tab2" />


<TextView
    android:id="@+id/tab2"
    android:layout_width="0dp"
    android:layout_height="30dp"
    android:background="#A67"
    android:gravity="center"
    android:text="Tab2"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toRightOf="@id/tab1"
    app:layout_constraintRight_toLeftOf="@+id/tab3" />


<TextView
    android:id="@+id/tab3"
    android:layout_width="0dp"
    android:layout_height="30dp"
    android:background="#767"
    android:gravity="center"
    android:text="Tab3"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toRightOf="@id/tab2"
    app:layout_constraintRight_toRightOf="parent" />

圖片二,按鈕+約束效果圖

寬度都設定為了match_constraint,或者0dp.類似LinerLayout的寫法,呃,這裡沒看到weight身影?
不急馬上來

修改上面佈局weight為 1:3:1

圖片三 效果圖比率

在Textview新增下面屬性:

       app:layout_constraintHorizontal_weight="3"

上面介紹了和LinerLayout一樣效果的屬性。那麼有什麼新的特性呢?

constraintLayout新增加特性

約束樣式

這裡寫圖片描述

橫向的相當於組成了一個鏈(Chains)。在這個鏈的最左側的元素成為鏈頭,我們可以在其身上設定一些屬性,來決定這個鏈的展示效果:

該屬性為:

layout_constraintHorizontal_chainStyle

上面已經見過Tab樣式的約束了,他們預設樣式是 spread。另外兩種樣式 packed
spread_inside。

我還是分別顯示一下吧:

spread + 寬度非0

這裡寫圖片描述

spread + 寬度為0,且可以通過weight控制分配比例(上例)

spread_inside + 寬度非0

這裡寫圖片描述

packed + 寬度非0
這裡寫圖片描述

好了,差不多了,我們可以在橫向或者縱向組成一個Chain,然後在Chain head設定chainStyle來搞一些事情。

官網有個圖:
這裡寫圖片描述

前四個我們都演示了,最後一個設計到一個新的bias屬性,

bias
英 [‘baɪəs] 美 [‘baɪəs]
n. 偏見;偏愛;斜紋;乖離率

  layout_constraintHorizontal_bias
  layout_constraintVertical_bias

增加浮動按鈕

一個很常見的功能,我們現在希望在右下角增加一個浮動按鈕。

看下如何實現:

<android.support.constraint.ConstraintLayout 
    ...
    tools:context="com.zhy.constrantlayout_learn.MainActivity">

    <TextView
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:background="#612"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintHorizontal_bias="0.9"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.9" />

</....>

我們在最後追加一個TextView冒充我們的浮動按鈕。可以看到我們設定了固定值,被設定約束為右下角。

正常情況我們可以通過margin來設定與右側與底部的距離。

但是這裡我們嘗試使用量個新的屬性:

layout_constraintHorizontal_bias
layout_constraintVertical_bias

即設定上下兩側間隙比例分別為90%與10%。這個很好理解,我們之前說了,再沒有bias這個屬性的時候,這兩側的拉力大小是一樣的,但是你可以通過bias來控制哪一側的力要大一些~~明白了麼~

所以,該屬性可以用於約束之前,控制兩側的“拉力”。

我們看一下效果圖:

這裡寫圖片描述

那麼到這裡,ConstraintLayout的屬性我們基本上介紹完了:

我們看一下:

layout_constraintLeft_toLeftOf 
layout_constraintLeft_toRightOf
layout_constraintRight_toLeftOf
layout_constraintRight_toRightOf
layout_constraintTop_toTopOf
layout_constraintTop_toBottomOf
layout_constraintBottom_toTopOf
layout_constraintBottom_toBottomOf

即文章的baseline對齊

layout_constraintBaseline_toBaselineOf

與left,right類似

layout_constraintStart_toEndOf
layout_constraintStart_toStartOf
layout_constraintEnd_toStartOf
layout_constraintEnd_toEndOf

margin不需要解釋

android:layout_marginStart
android:layout_marginEnd
android:layout_marginLeft
android:layout_marginTop
android:layout_marginRight
android:layout_marginBottom

layout_constraintHorizontal_bias
layout_constraintVertical_bias

layout_constraintHorizontal_chainStyle
layout_constraintVertical_chainStyle

layout_constraintVertical_weight

Guideline

作為約束佈局設定的輔助功能,可以在佈局上顯示輔助線,執行時候不進行顯示

這裡寫圖片描述

後面還有針對其他佈局的比較,待續…….

相關推薦

android ConstraintLayout基礎系列替換LinerLayout

它是什麼? 2016 年 Google I/O 大會上釋出 ConstraintLayout, 簡單來說,它是RelativeLaout,LinerLayout,percentLayout的升級版本,但是區別更加強調約束性(控制元件之間的關係), 它出現可

Linux基礎系列--文件系統初識

linux 初識1、Linux Shell執行接口: (1)、GUI接口:圖形交互接口 X-Windows Gnome:C程序開發 KDE:C++程序開發 XFace:嵌入式輕量級的桌面 (2)、CLI接口:字符交互接

計算機基礎系列計算機硬件

機械臂 增強 操作系統 材質 要求 驅動程序 編程語言 cmos ima what‘s the 計算機硬件?   一套完整的計算機系統分為計算機硬件、操作系統和軟件。python是編程語言,通過語言得到的是軟件,軟件的最終目的是為了操控硬件的運行,而直接用軟件操控硬件會造成

計算機基礎系列何為操作系統

調用接口 系列 邊界 解決 隔離 批處理 簡單 間接 自己 what‘s the 操作系統?   首先,我們要知道,為什麽要有操作系統。現代的計算機系統主要是由一個或者多個處理器,主存、硬盤、鍵盤、鼠標、顯示器、打印機、網絡接口及其他輸入輸出設備組成。現代計算機的組成部分極

Java基礎系列基礎數據類型

四種 分數 系列 數字 好處 java基礎 bsp style 情況 在Java中,一共有8種基本類型,其中有四種整型,兩種浮點型,還有一個表示unicode編碼的字符單元的字符類型char和1種用於表示真假值的boolean類型。 在這裏介紹一下有種在項目比較常用

Java 基礎系列volatile變量(一)

釋放 pos clu 每次 修改 mil 可見 family 依賴 一、鎖   兩種特性:互斥性(mutual exclusion)、可見性(visibility)、原子性(atomic)  互斥性就是一次只有一個線程可以訪問該共享數據,可見性就是釋放鎖之前,對共享數據

優動漫PAINT基礎系列拾色器教學

顏色 前段時間 dong 想要 jpeg gpo don 講解 soft 在優動漫PAINT中有類似Photoshop的拾色器功能麽?在優動漫PAINT中,可以直接輸入顏色數值選擇顏色麽?當然是可以的啦!怎麽呼出拾色器界面~ 看這邊... 前段時間小編有收到一些小夥伴的疑問

android影象處理系列五--給圖片新增邊框(中)

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

JavaSE基礎系列面向物件(上)

面向物件 1,什麼是面向物件?            面向物件(Object Oriented,OO)是軟體開發方法,是一種對現實世界理解和抽象的方法。  &n

android影象處理系列六--給圖片新增邊框(下)-圖片疊加

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

android影象處理系列四--給圖片新增邊框(上)

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

MySQL基礎系列 資料型別大全

MySQL中定義資料欄位的型別對你資料庫的優化是非常重要的。MySQL支援多種型別,大致可以分為三類:數值、日期/時間和字串(字元)型別。 數值型別 MySQL支援所有標準SQL數值資料型別。 這些型別包括嚴格數值資料型別(INTEGER、SMALLINT、DECIMAL和NUMERIC

MySQL基礎系列 DCL資料控制語句大全

1. CREATE USER建立使用者 例:建立一個使用者 名為jeffrey 密碼mypass 主機localhost CREATE USER ‘jeffrey’ @‘localhost’ IDENTIFIED BY ‘mypass’; 使用者表檢視剛建立的使用者 SELECT * F

MySQL基礎系列 DML資料操作語句CRUD大全

CRUD是指在做計算處理時的增加(Create)、讀取查詢(Retrieve)、更新(Update)和刪除(Delete)幾個單詞的首字母簡寫。CRUD主要被用在描述軟體系統中資料庫或者持久層的基本操作功能 下文中所用的表建立如下: CREATE TABLE tb_goods( id i

MySQL基礎系列 DDL 資料定義語句大全

連線資料庫 mysql -u [使用者名稱] -h[host] -P[埠號] -p[密碼] mysql -u root -h【127.0.0.1】 -P3306 -p123456 檢視資料庫SHOW DATABASES databases 使用或切換資料庫 USE [資料庫名]

MySQL基礎系列 DDL、DML和DCL的區別與理解

此文章主要介紹SQL資料庫的DDL、DML和DCL的區別與理解 一、DDL(data definition language) 資料定義語言,用於操作物件和物件的屬性 DDL用於操作物件和物件的屬性,這種物件包括資料庫本身,以及資料庫物件,像:表、檢視等等,DDL對這些物件和屬性的管理和

MySQL基礎系列 儲存過程和函式

摘要:儲存過程和函式是事先經過編譯並存儲在資料庫中的一段SQL語句的集合 儲存過程無返回值,函式有返回值 儲存過程的引數可以使用IN、OUT、INOUT,函式只能使用IN 建立儲存過程 CREATE PROCEDURE 建立函式使用 CREATE FUNCTION 使用CALL語句來呼叫

MySQL基礎系列 觸發器

1.觸發器 是一個特殊的儲存過程,只要當一個預定義的事件發生時就會被MySQL自動呼叫 2.建立觸發器的標準語句 CREATE TRIGGER trigger_name trigger_time trigger_event ONT tb_name FOR EACH ROW trigg

MySQL基礎系列 檢視詳解

1.檢視的概念 檢視是虛表,是從一個或幾個基本表(或檢視)中匯出的表,在系統的資料字典中僅存放了檢視的定義,不存放檢視對應的資料,是一條SELECT語句執行後返回的結果集。 2.檢視的特性 檢視看上去非常像資料庫的物理表,對它的操作同任何其它的表一樣。當通過檢視修改資料時,實際上是在

MySQL基礎系列 記一次利用儲存過程實現2600萬資料水平分表

日常開發中我們經常會遇到大表的情況,所謂的大表是指儲存了百萬級乃至千萬級條記錄的表。這樣的表過於龐大,導致資料庫在查詢和插入的時候耗時太長,效能低下,如果涉及聯合查詢的情況,效能會更加糟糕。分表的目的就是減少資料庫的負擔,提高資料庫的效率,通常點來講就是提高表的增刪改查效率,本文將介紹我