隨著ConstraintLayout 2.0
的推出,有一個名為ConstraintLayoutStates
的有趣新功能。 ConstraintLayoutStates
允許您建立具有不同狀態的佈局,並輕鬆地在它們之間切換。 通常,大多數佈局包含載入狀態,初始狀態,結束狀態和錯誤狀態。 使用ConstraintLayoutStates
,可以在這些不同的狀態之間切換。
你如何使用這個新功能?
第一步 新增依賴
dependencies {
implementation 'com.android.support.constraint:constraint-layout:2.0.0-alpha2'
}
複製程式碼
或者用androidX變種
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-alpha2'
複製程式碼
第二步 在layout 的檔案下建立不同狀態的佈局檔案
第三步 建立ConstraintLayoutStates
XML檔案
在xml
資原始檔夾中,建立包含狀態的xml
檔案。 在此示例中,我們將其稱為constraint_layout_states_example.xml
。 在此檔案中放置佈局的所有不同表示。 給他們有意義的id,如start , loading等,然後將它們連結到相關的約束檔案。
<?xml version="1.0" encoding="utf-8"?>
<ConstraintLayoutStates xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<State
android:id="@+id/start"
app:constraints="@layout/activity_constraint_layout_states_start" />
<State
android:id="@+id/loading"
app:constraints="@layout/activity_constraint_layout_states_loading" />
<State
android:id="@+id/end"
app:constraints="@layout/activity_constraint_layout_states_end" />
</ConstraintLayoutStates>
複製程式碼
第四步 在狀態之間切換
在您的Activity
/Fragment
中,您現在可以根據不同的條件輕鬆切換這些狀態。 首先需要在ConstraintLayout
物件上使用loadLayoutDescription()
載入狀態描述。 完成後,可以使用先前狀態檔案中定義的任何狀態呼叫constraintLayout.setState()
。
在下面的示例中,我們將狀態設定為loading
狀態。 然後過了一段時間(在這個例子中我只是post
了一個延遲的runnable
,模仿網路呼叫),我們將它設定為end狀態。
class ConstraintLayoutStateTest : AppCompatActivity() {
val handler = Handler()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_constraint_layout_states_start)
stateConstraintLayout.loadLayoutDescription(R.xml.constraintlayout_states_exmaple)
var change = false
button.setOnClickListener {
stateConstraintLayout.setState(R.id.loading, 0, 0)
HandlerCompat.postDelayed(handler, {
stateConstraintLayout.setState(if (change) R.id.start else R.id.end, 0, 0)
change = !change
}, null, 3000)
}
}
}
複製程式碼
效果圖
您現在應該可以在自己的應用程式中使用ConstraintLayoutStates 。 這個例子可以在GITHUB上找到 。