任何处理 ViewPager2 + Fragments + GoogleMap 的人?
我遇到了一个非常有趣的问题,在我的 viewpager 中,我有两个选项卡,每个选项卡都呈现片段。
其中一个片段生成了一张谷歌地图。
当我尝试通过该地图进行操作时,我得到了 viewpager2 试图向左和向右滑动的效果,这真的很烦人,所以我解决它的方法并不是很好。
我通过构造函数将 viewpager 暴露给其中一个片段,并触发了对顶部 viewpager 活动的回调。
在那里,我执行了一个简单isUserInputEnabled
的逻辑,而地图处于活动状态时禁用滑动。
一旦片段附加此回调寄存器并调用逻辑。
一旦片段分离,此回调将调用重新启用的逻辑。
这是一个解决方案,但我觉得它不好。有什么更好的想法吗?
与视图重叠对我来说似乎是一个错误。
/* top activity that hosts viewpager2 and it's tabs(fragments) */
class ViewTap extends AppCompatActivity
all the good stuff about viewpager2: ViewPager2
fun registerUi(){
...TapPagerAdapter(...this)
}
override fun fireSensitivityResolver(fragment: Fragment, flag: Boolean){
if(fragment is ViewMapLoader){
this.mViewPager2.isUserInputEnabled = !flag
}
}
/* callback defintion fo handling events about Tab Capale thingies */
interface TabCapableIf {
fun …
Run Code Online (Sandbox Code Playgroud) android google-maps android-fragments kotlin android-viewpager2
如何禁用 Material Design 底部导航菜单项?我可以设置,.isClickable = false
但这不会将菜单项显示为禁用,类似于按钮。我做不到.isEnabled
,API 不允许。
底部导航视图 XML
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/menu_item_1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="bottom"
android:background="@color/colorDark"
app:menu="@menu/bottom_navigation_menu">
Run Code Online (Sandbox Code Playgroud)
菜单 XML
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_home"
android:title="Home"
android:icon="@drawable/home_button"
app:showAsAction="ifRoom" />
Run Code Online (Sandbox Code Playgroud)
活动
class Something : AppCompatActivity() {
private lateinit var mHomeBtn: BottomNavigationItemView
override fun onCreate(...) {
mHomeBtn = this.findViewById(R.id.action_home)
mHomeBtn.isClickable = false // <--- will make it unable to click but won't show disabled
mHomeBtn.isEnabled = false // <--- will throw an error
mHomeBtn.setOnClickListener(this)
}
...
Run Code Online (Sandbox Code Playgroud)