Android ConstraintLayout ConstraintSet动态布局
生活随笔
收集整理的這篇文章主要介紹了
Android ConstraintLayout ConstraintSet动态布局
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
轉載請標明出處:http://blog.csdn.net/zhaoyanjun6/article/details/120730533
本文出自【趙彥軍的博客】
文章目錄
- 5個步驟
- 修改約束-修改控件約束條件
- 修改約束-布局切換
Android ConstraintLayout 約束布局詳解
Android ConstraintLayout ConstraintSet動態布局
在傳統布局方式中,如果要改變某個控件的位置,需要獲取 LayoutParams , 后臺修改屬性值就行了。
但是在約束布局 ConstraintLayout 中,要改變控件的約束條件,需要用到 ConstraintSet 類。主要有 5 個步驟
5個步驟
- 第一步:創建 ConstraintSet() 實例
- 第二步:需要復制一份父布局的約束,方法有三個如下
- 第三步:設置組件之間的約束了
- 第四步:設置一個動畫,并且要求api版本為19及以上
- 第五步:apply一下使設置生效
修改約束-修改控件約束條件
我們先寫一個布局
代碼如下:
<?xml version="1.0" encoding="utf-8"?> <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:id="@+id/root"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><TextViewandroid:id="@+id/view1"android:layout_width="0dp"android:layout_height="50dp"android:background="#f00"android:gravity="center"android:text="view1"android:textColor="#fff"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"app:layout_constraintWidth_percent="0.5" /><TextViewandroid:id="@+id/view2"android:layout_width="0dp"android:layout_height="50dp"android:background="@color/black"android:gravity="center"android:text="view2"android:textColor="#fff"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"app:layout_constraintVertical_bias="0.2"app:layout_constraintWidth_percent="0.2" /></androidx.constraintlayout.widget.ConstraintLayout>重新定義約束條件如下:
class MainActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)val rootLayout: ConstraintLayout = findViewById(R.id.root)val view1: View = findViewById(R.id.view1)val view2: View = findViewById(R.id.view2)view1.setOnClickListener {val set = ConstraintSet()set.clone(rootLayout)//view1,view2 頂部對齊set.connect(R.id.view1, ConstraintSet.TOP, R.id.view2, ConstraintSet.TOP)//view1左邊對齊view2左邊,距離20pxset.connect(R.id.view1, ConstraintSet.START, R.id.view2, ConstraintSet.END, 10)//增加過渡動畫,動畫也可以不用加,但是效果比較生硬if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {TransitionManager.beginDelayedTransition(rootLayout)}set.applyTo(rootLayout)}view2.setOnClickListener {val set = ConstraintSet()set.clone(rootLayout)//在父布局中垂直居中顯示set.centerVertically(R.id.view2, ConstraintSet.PARENT_ID)//增加過渡動畫,動畫也可以不用加,但是效果比較生硬if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {TransitionManager.beginDelayedTransition(rootLayout)}set.applyTo(rootLayout)}} }效果如下:
修改約束-布局切換
首先定義兩個布局,第一個布局 activity_main.xml:是一行顯示4個圖標
第二個布局 activity_main2.xml:2行顯示4個圖標
<?xml version="1.0" encoding="utf-8"?> <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:id="@+id/root"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><ImageViewandroid:id="@+id/view1"android:layout_width="50dp"android:layout_height="50dp"android:src="@drawable/weixin"app:layout_constraintEnd_toStartOf="@id/view2"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" /><ImageViewandroid:id="@+id/view2"android:layout_width="50dp"android:layout_height="50dp"android:src="@drawable/weibo"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toEndOf="@id/view1"app:layout_constraintTop_toTopOf="parent" /><ImageViewandroid:id="@+id/view3"android:layout_width="50dp"android:layout_height="50dp"android:src="@drawable/aqq1"app:layout_constraintEnd_toStartOf="@id/view4"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@id/view1" /><ImageViewandroid:id="@+id/view4"android:layout_width="50dp"android:layout_height="50dp"android:src="@drawable/dingding"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toEndOf="@id/view3"app:layout_constraintTop_toTopOf="@id/view3" /></androidx.constraintlayout.widget.ConstraintLayout>
通過代碼切換兩個視圖:
總結
以上是生活随笔為你收集整理的Android ConstraintLayout ConstraintSet动态布局的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java CountDownLatch的
- 下一篇: Java线程安全Lock、Reentra