切换按钮动画在抽屉导航视图中不起作用
Switch button animation doesn't work in Drawer Navigation View
在花了很多时间没有找到合适的解决方案后,我决定求助于此服务。
我有一个 the simplest application that implements Drawer 的例子。此示例仅包含没有任何实现的菜单项。在菜单项 Share 中,我添加了一个 Switch 和一个监听器:
main_nav.xml
<item
android:id="@+id/nav_share"
android:icon="@drawable/ic_menu_share"
app:actionViewClass="androidx.appcompat.widget.SwitchCompat"
android:title="@string/menu_share" />
MainActivity.kt
val menuItem = navigation_view.menu.findItem(R.id.nav_share)
val switch_id = menuItem.actionView as SwitchCompat
switch_id.isChecked = true
switch_id.setOnClickListener {
// TODO: empty scope
}
开关运行流畅,动画如下所示:
但现在我需要关闭主菜单项 如果开关关闭:
switch_id.setOnClickListener {
navigation_view.menu.findItem(R.id.nav_home).isEnabled = switch_id.isChecked
}
添加此行后,我的 Switch 动画中断!
我花了两天时间解决了这个问题,最后无果。
我的问题: WTF 与 android 菜单在 2021 年?为什么访问菜单项会破坏动画,我该如何解决?如果有任何帮助,我将不胜感激!!
我在 Android Tracker 中用这个问题创建了一个 issue 并得到了答案:
Either way, this is likely to be a non-trivial fix for an issue that
is not a regression and not impacting correctness of the UI. At this
time, we have no plans to address the issue.
然后建议了一个解决方法:
Something along the lines of adding a setOnCheckedChangeListener that
posts a delayed Runnable to effect the change. I'd recommend asking on
Whosebug if you need a detailed example.
E.g.
How to delay "runOnUiThread" in android?
我添加了一个 postDelay(200)
,切换动画效果很好:
switch.setOnCheckedChangeListener { _, isChecked ->
Handler(Looper.getMainLooper()).postDelayed({
navigationView.menu.findItem(R.id.nav_home).isEnabled = isChecked
}, 200)
}
在花了很多时间没有找到合适的解决方案后,我决定求助于此服务。
我有一个 the simplest application that implements Drawer 的例子。此示例仅包含没有任何实现的菜单项。在菜单项 Share 中,我添加了一个 Switch 和一个监听器:
main_nav.xml
<item
android:id="@+id/nav_share"
android:icon="@drawable/ic_menu_share"
app:actionViewClass="androidx.appcompat.widget.SwitchCompat"
android:title="@string/menu_share" />
MainActivity.kt
val menuItem = navigation_view.menu.findItem(R.id.nav_share)
val switch_id = menuItem.actionView as SwitchCompat
switch_id.isChecked = true
switch_id.setOnClickListener {
// TODO: empty scope
}
开关运行流畅,动画如下所示:
但现在我需要关闭主菜单项 如果开关关闭:
switch_id.setOnClickListener {
navigation_view.menu.findItem(R.id.nav_home).isEnabled = switch_id.isChecked
}
添加此行后,我的 Switch 动画中断!
我花了两天时间解决了这个问题,最后无果。
我的问题: WTF 与 android 菜单在 2021 年?为什么访问菜单项会破坏动画,我该如何解决?如果有任何帮助,我将不胜感激!!
我在 Android Tracker 中用这个问题创建了一个 issue 并得到了答案:
Either way, this is likely to be a non-trivial fix for an issue that is not a regression and not impacting correctness of the UI. At this time, we have no plans to address the issue.
然后建议了一个解决方法:
Something along the lines of adding a setOnCheckedChangeListener that posts a delayed Runnable to effect the change. I'd recommend asking on Whosebug if you need a detailed example.
E.g. How to delay "runOnUiThread" in android?
我添加了一个 postDelay(200)
,切换动画效果很好:
switch.setOnCheckedChangeListener { _, isChecked ->
Handler(Looper.getMainLooper()).postDelayed({
navigationView.menu.findItem(R.id.nav_home).isEnabled = isChecked
}, 200)
}