我在Kotlin中是新手。 我有一个视图需要以条件方式显示或隐藏。
在Kotlin中该如何实现?
在Java中:
public void showHide(View view){
if (view.getVisibility() == View.VISIBLE) {
view.setVisibility(View.INVISIBLE);
} else {
view.setVisibility(View.VISIBLE);
}
}
针对这个答案,我认为可以通过 Kotlin 风格的方式来实现:
fun showHide(view:View) {
view.visibility = if (view.visibility == View.VISIBLE){
View.INVISIBLE
} else{
View.VISIBLE
}
}
如果您想要显示图标
ic_back.visibility = View.VISIBLE
如果你想让可见性消失,请尝试这个:
ic_back.visibility = View.GONE
你可以简单地做到。
idTextview.isVisible = true
idTextview.isVisible = false
你可以在一个扩展函数中完成此操作:
fun View.toggleVisibility() {
if (visibility == View.VISIBLE) {
visibility = View.INVISIBLE
} else {
visibility = View.VISIBLE
}
}
可以这样使用:
someView.toggleVisibility()
fun showHide(view: View) {
if (view.visibility == View.VISIBLE) {
view.visibility = View.INVISIBLE
} else {
view.visibility = View.VISIBLE
}
}
在 Kotlin 中,有一种简单的方法:
fun toggleView(view: View) {
view.isVisible = !view.isVisible
}
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)
}
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
}
Android开发人员已经添加了一个扩展androidx.core.view.ViewKt#isVisible,用于在View.VISIBLE和View.GONE之间切换可见性。因此请使用该函数。
View
类的子类上调用。例如: LinearLayout
,TextView
等。
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()
}
visible ? View.VISIBLE : View.GONE
不起作用,我们必须在一行中编写 if else 语句。? - Aalap Patel