【问题标题】:How to set visibility in Kotlin?如何在 Kotlin 中设置可见性?
【发布时间】:2018-03-21 09:02:59
【问题描述】:

我是 Kotlin 的新手。我有一个需要以有条件的方式显示或隐藏的视图。
我如何在 Kotlin 中做到这一点?

在 Java 中:

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

【问题讨论】:

    标签: android kotlin


    【解决方案1】:

    针对这个答案,我相信实现这一点的 Kotlin 风格的方式也可以写成:

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

    【讨论】:

    • 我认为创建一个扩展函数是有意义的
    【解决方案2】:

    如果你想看到图标

     ic_back.visibility = View.VISIBLE
    

    如果您想看到 GONE,请尝试一下:

    ic_back.visibility = View.GONE
    

    【讨论】:

      【解决方案3】:

      你可以简单地做到这一点。

      idTextview.isVisible = true
      idTextview.isVisible = false
      

      【讨论】:

      • 就是这样,为什么有更多的代码,当你可以做更少的时候:L) 谢谢,想发布这个,但是当我看到你的回答时我没有.. 谢谢你
      【解决方案4】:

      您可以在extension function 中执行此操作:

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

      可以这样使用:

      someView.toggleVisibility()
      

      【讨论】:

        【解决方案5】:

        您可以使用 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 不起作用
        【解决方案6】:

        您可以使用以下代码:

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

        【讨论】:

          【解决方案7】:

          Kotlin 中的一个简单方法:

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

          【讨论】:

            【解决方案8】:

            如果视图最初是可见的,可以使用 xor 运算符来切换可见性。

            view.visibility = view.visibility.xor(View.GONE)
            

            然而,正确且更具可读性的方法是使用内联 var View.isVisible:

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

            【讨论】:

              【解决方案9】:

              这就是我在 Kotlin 中处理视图可见性的方式。这些方法可以在View 类的任何子类上调用。例如。 LinearLayoutTextView

              可见/消失:

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

              可见/不可见:

              // @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 语句。 ?
              • 不需要if/else,直接调用anyView.visibleOrGone(true/false)即可。
              【解决方案10】:

              您可以使用命令 .isVisible 获取视图的可见性状态

              我会告诉你怎么做的。

                 val menu: ConstraintLayout = findViewById(R.id.layMenu)
              
                  if (menu.isVisible==false){
                      //view is not visible
                  } else {
                      //view is visible
                  }
              

              【讨论】:

                猜你喜欢
                • 2020-02-28
                • 2020-08-10
                • 1970-01-01
                • 2019-10-06
                • 2021-01-19
                • 1970-01-01
                • 1970-01-01
                • 2015-04-18
                • 2017-08-25
                相关资源
                最近更新 更多