可见性更改在 CoordinatorLayout 上起作用,但现在在更改为约束布局时不起作用
Visibility changes worked on CoordinatorLayout but now they don't when changing to Constraint Layout
当某些内容加载完成时,我实现了进度条可见性从可见变为不可见的变化。当父视图是协调器布局时,它工作正常。现在我把它切换到 Constraint Layout 突然它不再工作了。
此更改是通过侦听点击的界面以编程方式完成的。当在片段内完成点击时,回调会在 activity 中设置可见性 off/on。之前很好用,现在不行了。
代码基本上是这样的:在我的片段 interface?.progressBarOff()
和我的 activity
override fun progressBarOff() {
progressbar.visibility = View.INVISIBLE // this line is getting called. so no problems with the interface
}
progressBarOn()
方法与此类似。
我试过了:
- runOnUiThread 什么都不做
- 我的 activity 的
onCreate
内的能见度发生了变化。但是,当从界面更改可见性时,它被调用但什么都不做。如果我在 onCreate
内将可见性设置为 VISIBLE
,它将保持可见但无法更改。
view.visibility = ConstraintLayout.VISIBLE
效果不佳。
view.visibility = View.GONE
效果不佳。
我在网上查找有关它为何不起作用的答案,有人说它与 Groups
有关,但我还没有使用过群组。
MAIN_ACTIVITY.XML
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.motion.widget.MotionLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/blackBackground"
android:nestedScrollingEnabled="false"
app:layoutDescription="@xml/activity_main_scene"
app:motionDebug="SHOW_ALL">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/player_background"
android:layout_width="match_parent"
android:layout_height="0dp"
android:background="#000000"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<FrameLayout
android:id="@+id/main_player"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintBottom_toBottomOf="@id/player_background"
app:layout_constraintTop_toTopOf="@id/player_background" />
<androidx.appcompat.widget.Toolbar
android:id="@+id/main_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:elevation="4dp"
android:theme="@style/TransparentActionBar"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:popupTheme="@style/BlackActionBarPopUp" />
<fragment
android:id="@+id/nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="0dp"
app:defaultNavHost="true"
app:layout_constraintBottom_toTopOf="@id/nav_view"
app:layout_constraintTop_toBottomOf="@id/player_background"
app:navGraph="@navigation/mobile_navigation" />
<ProgressBar // THIS PROGRESS BAR
android:id="@+id/main_progressbar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="invisible"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/nav_view"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:layout_gravity="bottom"
android:background="@drawable/navbar_background"
app:itemIconTint="@drawable/navbar_colors"
app:itemTextColor="@drawable/navbar_colors"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:menu="@menu/bottom_nav_menu" />
</androidx.constraintlayout.motion.widget.MotionLayout>
解决方案
由于我使用的是 Motion Layout,因此我不得不求助于使用另一个 Transition 来实现此效果。
<ConstraintSet android:id="@+id/progressbarOn">
<Constraint
android:id="@id/main_progressbar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="visible" />
</ConstraintSet>
<ConstraintSet android:id="@+id/progressbarOff">
<Constraint
android:id="@id/main_progressbar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="invisible" />
</ConstraintSet>
<Transition
android:id="@+id/progressbar"
app:constraintSetEnd="@id/progressbarOff"
app:constraintSetStart="@id/progressbarOn"
app:duration="0" />
每当我想打开或关闭进度条时,我只需输入:
view.setTransition(R.id.progressbar)
view.transitionToStart() // sets visibility ON
view.setTransition(R.id.progressbar)
view.transitionToEnd() // sets visibility OFF
我当前的动画没有出现任何错误或任何其他错误。
当某些内容加载完成时,我实现了进度条可见性从可见变为不可见的变化。当父视图是协调器布局时,它工作正常。现在我把它切换到 Constraint Layout 突然它不再工作了。
此更改是通过侦听点击的界面以编程方式完成的。当在片段内完成点击时,回调会在 activity 中设置可见性 off/on。之前很好用,现在不行了。
代码基本上是这样的:在我的片段 interface?.progressBarOff()
和我的 activity
override fun progressBarOff() {
progressbar.visibility = View.INVISIBLE // this line is getting called. so no problems with the interface
}
progressBarOn()
方法与此类似。
我试过了:
- runOnUiThread 什么都不做
- 我的 activity 的
onCreate
内的能见度发生了变化。但是,当从界面更改可见性时,它被调用但什么都不做。如果我在onCreate
内将可见性设置为VISIBLE
,它将保持可见但无法更改。 view.visibility = ConstraintLayout.VISIBLE
效果不佳。view.visibility = View.GONE
效果不佳。
我在网上查找有关它为何不起作用的答案,有人说它与 Groups
有关,但我还没有使用过群组。
MAIN_ACTIVITY.XML
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.motion.widget.MotionLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/blackBackground"
android:nestedScrollingEnabled="false"
app:layoutDescription="@xml/activity_main_scene"
app:motionDebug="SHOW_ALL">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/player_background"
android:layout_width="match_parent"
android:layout_height="0dp"
android:background="#000000"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<FrameLayout
android:id="@+id/main_player"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintBottom_toBottomOf="@id/player_background"
app:layout_constraintTop_toTopOf="@id/player_background" />
<androidx.appcompat.widget.Toolbar
android:id="@+id/main_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:elevation="4dp"
android:theme="@style/TransparentActionBar"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:popupTheme="@style/BlackActionBarPopUp" />
<fragment
android:id="@+id/nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="0dp"
app:defaultNavHost="true"
app:layout_constraintBottom_toTopOf="@id/nav_view"
app:layout_constraintTop_toBottomOf="@id/player_background"
app:navGraph="@navigation/mobile_navigation" />
<ProgressBar // THIS PROGRESS BAR
android:id="@+id/main_progressbar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="invisible"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/nav_view"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:layout_gravity="bottom"
android:background="@drawable/navbar_background"
app:itemIconTint="@drawable/navbar_colors"
app:itemTextColor="@drawable/navbar_colors"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:menu="@menu/bottom_nav_menu" />
</androidx.constraintlayout.motion.widget.MotionLayout>
解决方案
由于我使用的是 Motion Layout,因此我不得不求助于使用另一个 Transition 来实现此效果。
<ConstraintSet android:id="@+id/progressbarOn">
<Constraint
android:id="@id/main_progressbar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="visible" />
</ConstraintSet>
<ConstraintSet android:id="@+id/progressbarOff">
<Constraint
android:id="@id/main_progressbar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="invisible" />
</ConstraintSet>
<Transition
android:id="@+id/progressbar"
app:constraintSetEnd="@id/progressbarOff"
app:constraintSetStart="@id/progressbarOn"
app:duration="0" />
每当我想打开或关闭进度条时,我只需输入:
view.setTransition(R.id.progressbar)
view.transitionToStart() // sets visibility ON
view.setTransition(R.id.progressbar)
view.transitionToEnd() // sets visibility OFF
我当前的动画没有出现任何错误或任何其他错误。