Android ConstraintLayout 2.0:ConstraintLayoutStates

作者 : 开心源码 本文共1958个字,预计阅读时间需要5分钟 发布时间: 2022-05-12 共192人阅读

image

原文https://www.zhangman523.cn/383.html

随着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 的文件下创立不同状态的布局文件

image

第三步 创立ConstraintLayoutStatesXML文件

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)        }    }}

效果图

image

您现在应该可以在自己的应用程序中使用ConstraintLayoutStates 。 这个例子可以在GITHUB上找到 。

原文https://www.zhangman523.cn/383.html

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » Android ConstraintLayout 2.0:ConstraintLayoutStates

发表回复