如何在 Kotlin 中设置可见性?

60

我在Kotlin中是新手。 我有一个视图需要以条件方式显示或隐藏。
在Kotlin中该如何实现?

在Java中:

public void showHide(View view){
    if (view.getVisibility() == View.VISIBLE) {
        view.setVisibility(View.INVISIBLE);
    } else {
        view.setVisibility(View.VISIBLE);
    }
}
12个回答

64

针对这个答案,我认为可以通过 Kotlin 风格的方式来实现:

fun showHide(view:View) {
    view.visibility = if (view.visibility == View.VISIBLE){
        View.INVISIBLE
    } else{
        View.VISIBLE
    }
}

我认为创建一个扩展函数是有意义的。 - Vadim Kotov

41

如果您想要显示图标

 ic_back.visibility = View.VISIBLE

如果你想让可见性消失,请尝试这个:

ic_back.visibility = View.GONE

17

你可以简单地做到。

idTextview.isVisible = true
idTextview.isVisible = false

2
这就是了,为什么要写更多的代码,当你可以做得更少呢 :L) 谢谢,我本来想发帖的,但看到你的回答后就没发了..谢谢 - Nenad Štrbić

10

你可以在一个扩展函数中完成此操作:

fun View.toggleVisibility() {
    if (visibility == View.VISIBLE) {
        visibility = View.INVISIBLE
    } else {
        visibility = View.VISIBLE
    }
}

可以这样使用:

someView.toggleVisibility()

6
您可以使用Android Studio进行转换:点击您想要转换的Java文件,选择“Code-> Convert Java File To Kotlin File”,然后看看魔术般地发生了什么。结果如下:
fun showHide(view: View) {
        if (view.visibility == View.VISIBLE) {
            view.visibility = View.INVISIBLE
        } else {
            view.visibility = View.VISIBLE
        }
    }

有时候“bibidi bobidi boo”不起作用。 - morteza naji

6

在 Kotlin 中,有一种简单的方法:

fun toggleView(view: View) {
    view.isVisible = !view.isVisible
}

5
您可以使用以下代码:
fun View.isVisible(): Boolean {
    return visibility == View.VISIBLE
}

同时:

fun View.setVisible(visible: Boolean) {
    visibility = if (visible) {
        View.VISIBLE
    } else {
        View.GONE
    }
}

您可以使用以下方法:

if (text_view.isVisible()) {
    text_view.setVisible(false)
}

5
如果视图在最初是可见的,可以使用异或运算符来切换其可见性。
view.visibility = view.visibility.xor(View.GONE)

然而,正确且更易读的方法是使用内联变量View.isVisible

view.isVisible = !isVisible


inline var View.isVisible: Boolean
    get() = visibility == View.VISIBLE
    set(value) {
        visibility = if (value) View.VISIBLE else View.GONE
    }

2022年5月1日更新:

Android开发人员已经添加了一个扩展androidx.core.view.ViewKt#isVisible,用于在View.VISIBLE和View.GONE之间切换可见性。因此请使用该函数。


3
这是我在 Kotlin 中处理视图可见性的方式。这些方法可以在任何 View 类的子类上调用。例如: LinearLayoutTextView 等。 VISIBLE / GONE:
// @BindingAdapter("visibleOrGone")
fun View.visibleOrGone(visible: Boolean) {
    visibility = if(visible) View.VISIBLE else View.GONE
}

VISIBLE / INVISIBLE:

// @BindingAdapter("visibleOrInvisible")
fun View.visibleOrInvisible(visible: Boolean) {
    visibility = if(visible) View.VISIBLE else View.INVISIBLE
}

数据绑定: 如果您想使用以上方法与数据绑定一起使用,请取消注释@BindingAdapter

<FrameLayout
    app:visibleOrGone="@{viewModel.visibleView}"
    ...
    />

或者

<EditText
    app:visibleOrInvisible="@{viewModel.visibleView}"
    ...
    />

我的ViewModel类如下所示:

class LoginViewModel {
    val visibleView = ObservableBoolean()
}

很好的解释。在 Kotlin 中,visible ? View.VISIBLE : View.GONE 不起作用,我们必须在一行中编写 if else 语句。? - Aalap Patel
不需要if/else,直接调用anyView.visibleOrGone(true/false)即可。 - Hemant Kaushik

2
  • 如果您正在使用Kotlin的viewBinding
  • binding.yourView.visibility = View.VISIBLE
注:这是一段关于如何在Kotlin中使用viewBinding的代码示例。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接