原文www.zhangman523.cn/383.htmlphp
随着ConstraintLayout 2.0
的推出,有一个名为ConstraintLayoutStates
的有趣新功能。 ConstraintLayoutStates
容许您建立具备不一样状态的布局,并轻松地在它们之间切换。 一般,大多数布局包含加载状态,初始状态,结束状态和错误状态。 使用ConstraintLayoutStates
,能够在这些不一样的状态之间切换。html
你如何使用这个新功能?java
dependencies {
implementation 'com.android.support.constraint:constraint-layout:2.0.0-alpha2'
}
复制代码
或者用androidX变种android
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-alpha2'
复制代码
ConstraintLayoutStates
XML文件在xml
资源文件夹中,建立包含状态的xml
文件。 在此示例中,咱们将其称为constraint_layout_states_example.xml
。 在此文件中放置布局的全部不一样表示。 给他们有意义的id,如start , loading等,而后将它们连接到相关的约束文件。git
<?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()
。github
在下面的示例中,咱们将状态设置为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)
}
}
}
复制代码
效果图app
您如今应该能够在本身的应用程序中使用ConstraintLayoutStates 。 这个例子能够在GITHUB上找到 。ide