Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在constraintlayout中覆盖视图?_Android_Android Constraintlayout - Fatal编程技术网

Android 如何在constraintlayout中覆盖视图?

Android 如何在constraintlayout中覆盖视图?,android,android-constraintlayout,Android,Android Constraintlayout,我有我的登录活动的这个布局。我想覆盖progressBar,就像可以使用FrameLayout一样。如何使用ConstraintLayout执行此操作 <layout> <data> <variable name="vm" type="com.app.android.login.vm" /> </data> <ScrollView xmlns:and

我有我的登录活动的这个布局。我想覆盖
progressBar
,就像可以使用
FrameLayout
一样。如何使用
ConstraintLayout
执行此操作

<layout>

    <data>

        <variable
            name="vm"
            type="com.app.android.login.vm" />
    </data>

    <ScrollView 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:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fillViewport="true"
        tools:context="com.app.android.login.LoginActivity"
        tools:ignore="missingPrefix">

        <android.support.constraint.ConstraintLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:paddingBottom="@dimen/default_view_margin_bottom_8dp">

            <android.support.design.widget.TextInputLayout
                android:id="@+id/til_login_email"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginEnd="@dimen/default_view_margin_right_8dp"
                android:layout_marginStart="@dimen/default_view_margin_left_8dp"
                android:textColorHint="@color/colorSecondaryText"
                app:hintTextAppearance="@style/AppTheme.InputLayoutStyle"
                app:layout_constraintBottom_toTopOf="@+id/til_login_password"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintVertical_chainStyle="packed">

                <android.support.design.widget.TextInputEditText
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:hint="@string/login_email"
                    android:imeOptions="actionNext"
                    android:singleLine="true"
                    android:text="@={vm.emailField}"
                    android:textColor="@color/colorPrimaryText" />
            </android.support.design.widget.TextInputLayout>

            <android.support.design.widget.TextInputLayout
                android:id="@+id/til_login_password"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginEnd="@dimen/default_view_margin_right_8dp"
                android:layout_marginStart="@dimen/default_view_margin_left_8dp"
                android:textColorHint="@color/colorSecondaryText"
                app:hintTextAppearance="@style/AppTheme.InputLayoutStyle"
                app:layout_constraintBottom_toTopOf="@+id/btn_login_login"
                app:layout_constraintTop_toBottomOf="@+id/til_login_email"
                app:layout_constraintVertical_chainStyle="packed">

                <android.support.design.widget.TextInputEditText
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:hint="@string/login_password"
                    android:imeOptions="actionDone"
                    android:inputType="textPassword"
                    android:singleLine="true"
                    android:text="@={vm.passwordField}"
                    android:textColor="@color/colorPrimaryText" />
            </android.support.design.widget.TextInputLayout>

            <Button
                android:id="@+id/btn_login_login"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginEnd="@dimen/default_view_margin_right_8dp"
                android:layout_marginStart="@dimen/default_view_margin_left_8dp"
                android:layout_marginTop="48dp"
                android:onClick="@{vm::login}"
                android:text="@string/login_btn_text"
                android:textColor="@color/colorWhite"
                app:layout_constraintBottom_toTopOf="@+id/textview_login_forgot_password"
                app:layout_constraintTop_toBottomOf="@+id/til_login_password"
                app:layout_constraintVertical_chainStyle="packed" />

            <TextView
                android:id="@+id/textview_login_forgot_password"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginEnd="@dimen/default_view_margin_right_8dp"
                android:layout_marginStart="@dimen/default_view_margin_left_8dp"
                android:layout_marginTop="36dp"
                android:gravity="center"
                android:text="@string/login_forgot_password"
                app:layout_constraintBottom_toTopOf="@+id/btn_login_register"
                app:layout_constraintTop_toBottomOf="@+id/btn_login_login"
                app:layout_constraintVertical_chainStyle="packed" />

            <Button
                android:id="@+id/btn_login_register"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginEnd="@dimen/default_view_margin_right_8dp"
                android:layout_marginStart="@dimen/default_view_margin_left_8dp"
                android:text="@string/login_sign_up"
                android:textColor="@color/colorWhite"
                app:layout_constraintBottom_toBottomOf="parent" />

            <ProgressBar
                android:id="@+id/progressBar"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:visibility="@{vm.progressVisibility}"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintTop_toTopOf="parent" />

        </android.support.constraint.ConstraintLayout>
    </ScrollView>
</layout>


我正在寻找解决方案,应该为API级别19+工作。我不想通过将
按钮
进度条
包装在
视图组
内,在布局中添加更多层次结构。

如果要100%覆盖目标视图,将覆盖视图的所有侧面约束到目标视图的相应侧面,并将覆盖视图的高度和宽度设置为
0dp
,如下所示:

    <View
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintBottom_toBottomOf="@id/animation_view"
        app:layout_constraintLeft_toLeftOf="@id/animation_view"
        app:layout_constraintRight_toRightOf="@id/animation_view"
        app:layout_constraintTop_toTopOf="@id/animation_view"/>

下面是一个工作示例。在下图中,在图像上放置了一张红色的纸条。XML跟随图像


用于
ConstraintLayout
以了解更多信息。

有两个选项,在每种情况下,您向
标记添加一个属性。要么是

android:translationZ="2dp"


API级别必须大于等于21。

我想为您提供XML解决方案的替代方案。
还可以通过编程方式将视图添加到根视图中。(
ConstraintLayout

ViewGroupOverlay
是位于视图组(“主体视图”)顶部的额外图层,该视图在该视图中所有其他内容(包括视图组的子视图)之后绘制。与覆盖层的交互通过添加和删除视图和绘图来完成

您还可以查看此文件以获取更多信息。

这个问题也有帮助。

您可以尝试以下选项之一: 1.在布局外部添加相对布局,如下所示:


  • 在活动的onCreate中添加视图覆盖,如下所述

  • 另一个简单的解决方法是将
    按钮
    更改为
    视图
    ,更改背景和大小。用
    文本视图
    覆盖它以替换旧的
    按钮
    文本和另一个
    视图
    以供以后单击

    进度条上设置高程2dp
    似乎可以工作

    android:elevation="2dp"
    

    您也可以尝试按照to a中的建议设置
    translationZ
    。对我来说,这在运行API17的模拟器上工作,进度条如预期的那样出现在顶部。如果您收到任何警告,请检查您的构建版本,这是您的API 19解决方案。它将一个
    CircularProgressDrawable
    覆盖在
    ConstraintLayout

    这就是它看起来的样子:

    你要做的是:

  • 摆脱XML
    ProgressBar

  • 为XML
    ConstraintLayout
    提供一个id,例如:

    android:id="@+id/cl"
    
  • 将此代码添加到MainActivity:

    public class MainActivity extends AppCompatActivity implements View.OnClickListener {
        boolean toggle;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            final ConstraintLayout cl = findViewById(R.id.cl);
            cl.setOnClickListener(this);
        }
    
        @Override
        public void onClick(final View view) {
            toggle ^= true;
            if (toggle) {
                startProgress();
            } else {
                stopProgress();
            }
        }
    
        void startProgress() {
            final ConstraintLayout cl = findViewById(R.id.cl);
            final CircularProgressDrawable progressDrawable = new CircularProgressDrawable(this);
            progressDrawable.setColorSchemeColors(Color.MAGENTA);
            progressDrawable.setCenterRadius(50f);
            progressDrawable.setStrokeWidth(12f);
            progressDrawable.setStrokeCap(Paint.Cap.BUTT);
            cl.post(new Runnable() {
                @Override
                public void run() {
                    progressDrawable.setBounds(0, 0, cl.getWidth(), cl.getHeight());
                    cl.getOverlay().add(progressDrawable);
                }
            });
            progressDrawable.start();
        }
    
        void stopProgress() {
            final ConstraintLayout cl = findViewById(R.id.cl);
            final CircularProgressDrawable progressDrawable = new CircularProgressDrawable(this);
            progressDrawable.setColorSchemeColors(Color.MAGENTA);
            progressDrawable.setCenterRadius(50f);
            progressDrawable.setStrokeWidth(12f);
            progressDrawable.setStrokeCap(Paint.Cap.BUTT);
            cl.post(new Runnable() {
                @Override
                public void run() {
                    cl.getOverlay().clear();
                }
            });
            progressDrawable.stop();
        }
    }
    

  • 您可以通过设置视图的
    Z
    转换来实现您的目标

    将此方法放在助手类中(例如:
    UIUtils
    ),并将其用于视图:

    /**
     * Set the 'Z' translation for a view
     *
     * @param view         {@link View} to set 'Z' translation for
     * @param translationZ 'Z' translation as float
     */
    public static void setTranslationZ(View view, float translationZ) {
        ViewCompat.setTranslationZ(view, translationZ);
    }
    
    用法:

    UIUTils.setTranslationZ(YOUR_VIEW, 5);
    

    在我的观察中,Android按照视图在xml文件中的显示顺序沿z轴“堆叠”视图,文件末尾的视图将位于z轴的顶部,文件开头的视图将位于底部。当然,一旦开始设置高程和zTranslation等,z轴堆栈顺序将受到影响

    因此,将progressBar声明移动到ConstraintLayout的末尾应该使其显示在其他视图的上方,这对我来说很有效。

    更新了2020年的解决方案 科特林语 我有两个场景,第一个是普通按钮,第二个是 按钮中心的进度,防止单击操作

    若你们想知道我是如何处理按钮和进度条的,这里有一个简单的代码 如果你想得到一个想法,可以使用jsut这两种方法

    private fun disableButton() {
        button.run {
            preservedButtonText = text.toString()
            text = ""
            isClickable = true
            isEnabled = false
        }
        progressBar.visibility = View.VISIBLE
    
    }
    
    private fun enableButton() {
        button.run {
            text = preservedButtonText
            isClickable = false
        }
        progressBar.visibility = View.INVISIBLE
    }
    
    让你感到惊讶的是,有一门课可以做你刚刚用到的所有东西 我控制创建父约束布局及其子约束布局(按钮,进度条) 编程的

     /**
     * Created by Amirahmad Adibi.
     * XProject | Copyrights 2019-12-16.
     */
    
    class ZProgressButton(context: Context, var attributeSet: AttributeSet) :
        ConstraintLayout(context, attributeSet) {
        var isLoading: Boolean = false
            set(value) {
                handelShowing(value)
                field = value
            }
    
        var preservedButtonText: String = ""
        var button: Button
        var progressBar: ProgressBar
    
        init {
            resetPadding()
    
            button = getButton(context, attributeSet)
            progressBar = getProgressBar(context, attributeSet)
            preservedButtonText = button.text.toString()
    
            addView(button)
            addView(progressBar)
            @RequiresApi(Build.VERSION_CODES.LOLLIPOP)
            progressBar.elevation = 2f
            ViewCompat.setTranslationZ(progressBar, 5f)
            ViewCompat.setTranslationZ(button, 1f)
            handleConstraint(this, button, progressBar)
        }
    
        private fun handleConstraint(
            view: ConstraintLayout,
            button: Button,
            progressBar: ProgressBar
        ) {
            with(ConstraintSet()) {
                clone(view)
                connect(button.id, ConstraintSet.RIGHT, view.id, ConstraintSet.RIGHT)
                connect(button.id, ConstraintSet.LEFT, view.id, ConstraintSet.LEFT)
                connect(button.id, ConstraintSet.TOP, view.id, ConstraintSet.TOP)
                connect(button.id, ConstraintSet.BOTTOM, view.id, ConstraintSet.BOTTOM)
                connect(progressBar.id, ConstraintSet.RIGHT, view.id, ConstraintSet.RIGHT)
                connect(progressBar.id, ConstraintSet.LEFT, view.id, ConstraintSet.LEFT)
                connect(progressBenter code herear.id, ConstraintSet.TOP, view.id, ConstraintSet.TOP)
                connect(progressBar.id, ConstraintSet.BOTTOM, view.id, ConstraintSet.BOTTOM)
                applyTo(view)
            }
        }
    
        private fun getButton(context: Context, attributeSet: AttributeSet): Button {
            return ZButton(context, attributeSet).run {
                id = View.generateViewId()
                text = "text"
                layoutParams = ViewGroup.LayoutParams(
                    ViewGroup.LayoutParams.MATCH_PARENT,
                    ViewGroup.LayoutParams.MATCH_PARENT
                )
                isClickable = true
                return@run this
            }
        }
    
        private fun getProgressBar(context: Context, attributeSet: AttributeSet): ProgressBar {
            return ProgressBar(context, attributeSet).run {
                id = View.generateViewId()
                visibility = View.VISIBLE
                layoutParams = ViewGroup.LayoutParams(
                    ViewGroup.LayoutParams.WRAP_CONTENT,
                    ViewGroup.LayoutParams.WRAP_CONTENT
                )
                setPadding(4, 4, 4, 4)
                return@run this
            }
        }
    
    
        fun resetPadding() {
            setPadding(0, 0, 0, 0)
        }
    
    
        fun handelShowing(value: Boolean) {
            removeView(button)
            removeView(progressBar)
            if (value) {
                disableButton()
            } else {
                enableButton()
            }
            addView(button)
            addView(progressBar)
        }
    
        private fun disableButton() {
            button.run {
                preservedButtonText = text.toString()
                text = ""
                isClickable = true
                isEnabled = false
            }
            progressBar.visibility = View.VISIBLE
    
        }
    
        private fun enableButton() {
            button.run {
                text = preservedButtonText
                isClickable = false
            }
            progressBar.visibility = View.INVISIBLE
        }
    }
    

    用法:

    buttonLoading.setOnClickListener {
        progressButton.isLoading = true
    }
    buttonDone.setOnClickListener {
        progressButton.isLoading = false
    }
    

    android:elevation在API级别19中不起作用。将使用一个简单的技巧来使用卡片视图并设置此卡片的高程

     <androidx.cardview.widget.CardView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/white"
            android:padding="@dimen/padding_10"
            app:contentPadding="16dp"/>
    

    对于上述情况,我是这样修复的

    <FrameLayout
            android:layout_marginTop="16dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
    
            <ProgressBar
                android:id="@+id/progress_reset_password"
                android:visibility="visible"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:indeterminateTint="@color/colorAccent"
                android:layout_gravity="center_horizontal"
                android:translationZ="2dp"
                android:elevation="2dp"/>
    
            <Button
                android:id="@+id/btnGetOTP"
                style="@style/styleButton"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="80dp"
                android:layout_marginRight="80dp"
                android:text="@string/check_email"
                android:textColor="@color/colorWhite"
                android:textSize="16sp"
                android:textStyle="bold"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent" />
    
    
        </FrameLayout>
    
    
    

    我使用额外的图像将覆盖添加到图像视图布局中。另外,将额外的覆盖图像视图放在主图像视图的正下方

    <?xml version="1.0" encoding="utf-8"?>
    <layout 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">
    
        <androidx.cardview.widget.CardView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:cardCornerRadius="@dimen/spacing_small"
            android:layout_marginTop="@dimen/spacing_normal">
    
            <androidx.constraintlayout.widget.ConstraintLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content">
    
                <androidx.appcompat.widget.AppCompatImageView
                    android:id="@+id/imageViewBlog"
                    android:layout_width="match_parent"
                    android:layout_height="@dimen/blog_post_height"
                    android:scaleType="centerCrop"
                    app:layout_constraintTop_toTopOf="parent"
                    app:srcCompat="@drawable/ic_placeholder" />
    
                <androidx.appcompat.widget.AppCompatImageView
                    android:layout_width="0dp"
                    android:layout_height="0dp"
                    android:scaleType="fitXY"
                    app:layout_constraintBottom_toBottomOf="parent"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toTopOf="parent"
                    app:srcCompat="@drawable/black_overlay" />
    
                <androidx.appcompat.widget.AppCompatTextView
                    android:id="@+id/tvBlogTopTitle"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_marginBottom="@dimen/spacing_small"
                    android:ellipsize="end"
                    android:fontFamily="sans-serif-medium"
                    android:maxLines="1"
                    android:textColor="@color/pale_grey"
                    app:layout_constraintBottom_toTopOf="@+id/tvBlogBigTitle"
                    app:layout_constraintEnd_toEndOf="@+id/tvBlogBigTitle"
                    app:layout_constraintStart_toStartOf="@id/tvBlogBigTitle"
                    tools:text="Travel Inspiration" />
    
                <androidx.appcompat.widget.AppCompatTextView
                    android:id="@+id/tvBlogBigTitle"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_marginStart="@dimen/spacing_normal"
                    android:layout_marginLeft="@dimen/spacing_normal"
                    android:layout_marginEnd="@dimen/spacing_normal"
                    android:layout_marginRight="@dimen/spacing_normal"
                    android:layout_marginBottom="@dimen/spacing_normal"
                    android:ellipsize="end"
                    android:maxLines="2"
                    android:textColor="@color/white"
                    android:textSize="@dimen/font_tiny"
                    app:layout_constraintBottom_toBottomOf="@+id/imageViewBlog"
                    app:layout_constraintEnd_toEndOf="@id/imageViewBlog"
                    app:layout_constraintStart_toStartOf="@id/imageViewBlog"
                    tools:text="This Photographer is Selling Prints of Her Wildlife Photos to \n in the Masai Mara…" />
    
            </androidx.constraintlayout.widget.ConstraintLayout>
    
        </androidx.cardview.widget.CardView>
    
    
    

    覆盖图像:


    我按照您的建议进行了更改,但没有覆盖
    LottieAnimationView
    谢谢。你能试试我的布局,看看为什么它不能与我的布局一起工作吗?@a这是更新答案中pastebin的代码,除了我使用了
    ImageView
    而不是
    LottieAnimationView
    ,我没有它,并添加了一个scrim,以便我可以看到覆盖。我的意思是。你能试试我在问题中的代码吗。我相信你也会面临同样的问题issue@AjayS我不确定你想要的结果。我将有几天无法访问开发环境,因此我无法深入调查此事。@AjayS是的,我添加了一个也适用于API 19的解决方案。@AjayS有关详细信息,请参阅此“android:stateListAnimator=“@null”“这需要API级别21和更高级别,没错。我错过了。我编辑了我的答案,并将继续考虑api-level-19解决方案。我不想为此在布局中添加更多层次结构。我不想为此在布局中添加更多层次结构。根据顺序,xml似乎不够安全,因为xml可能会被错误或按IDE重新排序。请解释您的代码的作用以及它是如何实现的。
     /**
     * Created by Amirahmad Adibi.
     * XProject | Copyrights 2019-12-16.
     */
    
    class ZProgressButton(context: Context, var attributeSet: AttributeSet) :
        ConstraintLayout(context, attributeSet) {
        var isLoading: Boolean = false
            set(value) {
                handelShowing(value)
                field = value
            }
    
        var preservedButtonText: String = ""
        var button: Button
        var progressBar: ProgressBar
    
        init {
            resetPadding()
    
            button = getButton(context, attributeSet)
            progressBar = getProgressBar(context, attributeSet)
            preservedButtonText = button.text.toString()
    
            addView(button)
            addView(progressBar)
            @RequiresApi(Build.VERSION_CODES.LOLLIPOP)
            progressBar.elevation = 2f
            ViewCompat.setTranslationZ(progressBar, 5f)
            ViewCompat.setTranslationZ(button, 1f)
            handleConstraint(this, button, progressBar)
        }
    
        private fun handleConstraint(
            view: ConstraintLayout,
            button: Button,
            progressBar: ProgressBar
        ) {
            with(ConstraintSet()) {
                clone(view)
                connect(button.id, ConstraintSet.RIGHT, view.id, ConstraintSet.RIGHT)
                connect(button.id, ConstraintSet.LEFT, view.id, ConstraintSet.LEFT)
                connect(button.id, ConstraintSet.TOP, view.id, ConstraintSet.TOP)
                connect(button.id, ConstraintSet.BOTTOM, view.id, ConstraintSet.BOTTOM)
                connect(progressBar.id, ConstraintSet.RIGHT, view.id, ConstraintSet.RIGHT)
                connect(progressBar.id, ConstraintSet.LEFT, view.id, ConstraintSet.LEFT)
                connect(progressBenter code herear.id, ConstraintSet.TOP, view.id, ConstraintSet.TOP)
                connect(progressBar.id, ConstraintSet.BOTTOM, view.id, ConstraintSet.BOTTOM)
                applyTo(view)
            }
        }
    
        private fun getButton(context: Context, attributeSet: AttributeSet): Button {
            return ZButton(context, attributeSet).run {
                id = View.generateViewId()
                text = "text"
                layoutParams = ViewGroup.LayoutParams(
                    ViewGroup.LayoutParams.MATCH_PARENT,
                    ViewGroup.LayoutParams.MATCH_PARENT
                )
                isClickable = true
                return@run this
            }
        }
    
        private fun getProgressBar(context: Context, attributeSet: AttributeSet): ProgressBar {
            return ProgressBar(context, attributeSet).run {
                id = View.generateViewId()
                visibility = View.VISIBLE
                layoutParams = ViewGroup.LayoutParams(
                    ViewGroup.LayoutParams.WRAP_CONTENT,
                    ViewGroup.LayoutParams.WRAP_CONTENT
                )
                setPadding(4, 4, 4, 4)
                return@run this
            }
        }
    
    
        fun resetPadding() {
            setPadding(0, 0, 0, 0)
        }
    
    
        fun handelShowing(value: Boolean) {
            removeView(button)
            removeView(progressBar)
            if (value) {
                disableButton()
            } else {
                enableButton()
            }
            addView(button)
            addView(progressBar)
        }
    
        private fun disableButton() {
            button.run {
                preservedButtonText = text.toString()
                text = ""
                isClickable = true
                isEnabled = false
            }
            progressBar.visibility = View.VISIBLE
    
        }
    
        private fun enableButton() {
            button.run {
                text = preservedButtonText
                isClickable = false
            }
            progressBar.visibility = View.INVISIBLE
        }
    }
    
    buttonLoading.setOnClickListener {
        progressButton.isLoading = true
    }
    buttonDone.setOnClickListener {
        progressButton.isLoading = false
    }
    
     <androidx.cardview.widget.CardView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/white"
            android:padding="@dimen/padding_10"
            app:contentPadding="16dp"/>
    
    <FrameLayout
            android:layout_marginTop="16dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
    
            <ProgressBar
                android:id="@+id/progress_reset_password"
                android:visibility="visible"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:indeterminateTint="@color/colorAccent"
                android:layout_gravity="center_horizontal"
                android:translationZ="2dp"
                android:elevation="2dp"/>
    
            <Button
                android:id="@+id/btnGetOTP"
                style="@style/styleButton"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="80dp"
                android:layout_marginRight="80dp"
                android:text="@string/check_email"
                android:textColor="@color/colorWhite"
                android:textSize="16sp"
                android:textStyle="bold"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent" />
    
    
        </FrameLayout>
    
    <?xml version="1.0" encoding="utf-8"?>
    <layout 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">
    
        <androidx.cardview.widget.CardView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:cardCornerRadius="@dimen/spacing_small"
            android:layout_marginTop="@dimen/spacing_normal">
    
            <androidx.constraintlayout.widget.ConstraintLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content">
    
                <androidx.appcompat.widget.AppCompatImageView
                    android:id="@+id/imageViewBlog"
                    android:layout_width="match_parent"
                    android:layout_height="@dimen/blog_post_height"
                    android:scaleType="centerCrop"
                    app:layout_constraintTop_toTopOf="parent"
                    app:srcCompat="@drawable/ic_placeholder" />
    
                <androidx.appcompat.widget.AppCompatImageView
                    android:layout_width="0dp"
                    android:layout_height="0dp"
                    android:scaleType="fitXY"
                    app:layout_constraintBottom_toBottomOf="parent"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toTopOf="parent"
                    app:srcCompat="@drawable/black_overlay" />
    
                <androidx.appcompat.widget.AppCompatTextView
                    android:id="@+id/tvBlogTopTitle"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_marginBottom="@dimen/spacing_small"
                    android:ellipsize="end"
                    android:fontFamily="sans-serif-medium"
                    android:maxLines="1"
                    android:textColor="@color/pale_grey"
                    app:layout_constraintBottom_toTopOf="@+id/tvBlogBigTitle"
                    app:layout_constraintEnd_toEndOf="@+id/tvBlogBigTitle"
                    app:layout_constraintStart_toStartOf="@id/tvBlogBigTitle"
                    tools:text="Travel Inspiration" />
    
                <androidx.appcompat.widget.AppCompatTextView
                    android:id="@+id/tvBlogBigTitle"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_marginStart="@dimen/spacing_normal"
                    android:layout_marginLeft="@dimen/spacing_normal"
                    android:layout_marginEnd="@dimen/spacing_normal"
                    android:layout_marginRight="@dimen/spacing_normal"
                    android:layout_marginBottom="@dimen/spacing_normal"
                    android:ellipsize="end"
                    android:maxLines="2"
                    android:textColor="@color/white"
                    android:textSize="@dimen/font_tiny"
                    app:layout_constraintBottom_toBottomOf="@+id/imageViewBlog"
                    app:layout_constraintEnd_toEndOf="@id/imageViewBlog"
                    app:layout_constraintStart_toStartOf="@id/imageViewBlog"
                    tools:text="This Photographer is Selling Prints of Her Wildlife Photos to \n in the Masai Mara…" />
    
            </androidx.constraintlayout.widget.ConstraintLayout>
    
        </androidx.cardview.widget.CardView>