Constraint遇到的那些坑之Android View设置visible无效的问题

Constraint遇到的那些坑之Android View设置visible无效的问题

  • 发现问题
    • Talk is cheap.Show me your code.
    • 解决方法

发现问题

近期在开发界面的时候,需要做Android的控件显示隐藏的操作,发现在代码中设置visible属性不生效,再看代码确确实实也执行了。发现问题很诡异,排查了很久终于解决了。
Constraint遇到的那些坑之Android View设置visible无效的问题_第1张图片

Talk is cheap.Show me your code.

当当当当~

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <Button
        android:id="@+id/button_1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Action1"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    <Button
        android:id="@+id/button_2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Action2"
        app:layout_constraintTop_toBottomOf="@id/button_1"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent" />
    <Button
        android:id="@+id/button_3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Action3"
        app:layout_constraintTop_toBottomOf="@id/button_2"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent" />

    <androidx.constraintlayout.widget.Group
        android:id="@+id/new_function"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:constraint_referenced_ids="button_1,button_2,button_3" />
</androidx.constraintlayout.widget.ConstraintLayout>
package com.example.jetpack_demo

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.Button

class DemoActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.demo_layout)

        findViewById<Button>(R.id.button_1).setOnClickListener {
            findViewById<Button>(R.id.button_1).visibility = View.GONE
        }
    }
}

我们执行后发现,效果并不理想。本来想上视频,但是csdn不支持直接上传,还得传到优酷,bilibili之类的网站,用链接的方式显示。算了,不麻烦了,想看一下效果的同学可以粘贴代码直接到自己工程里运行效果。

点击ACTION1按钮理想效果应该是隐藏掉ACTION2的,但是没有隐藏。

解决方法

不知道你们有没有发现,我这里引用里ConstrintLayout布局中的Group控件,对,没错,就是他搞的鬼。
凡是在Group控件的ids属性中包含的id,显示结果永远跟Group一致。只要把需要单独设置显示隐藏的控件id移出单独处理即可。
Constraint遇到的那些坑之Android View设置visible无效的问题_第2张图片
问题解决!!

你可能感兴趣的:(android,毛病)