【问题标题】:Enabling TabLayout is not enabling onTouchEvents - Tabs not clickable启用 TabLayout 不会启用 onTouchEvents - 选项卡不可点击
【发布时间】:2020-06-05 18:37:09
【问题描述】:

我有简单的TabLayout 和 2 个Tabs。在某一时刻,我需要禁用 TabLayout 并禁用用户与 Tabs 的交互。

但如果我想再次启用它们,它就不起作用。选项卡指示器和 alpha 恢复正常,但选项卡对用户交互没有反应。

select() 函数与侦听器正常反应,只有与屏幕上的选项卡的物理交互不起作用。

有人有这个问题吗?

启用/禁用Tabs 的功能(某些部分只是对禁用状态的视觉更改 - 如果您像Button 一样禁用它,TabLayout 不会变灰)

private fun deactivateTabs(){
        tabs.apply {
            selectTab(null)
            isEnabled = false
            touchables?.forEach {
                it.isEnabled = false
                it.alpha = .5f
            }
            setSelectedTabIndicatorColor(ContextCompat.getColor(tabs.context, R.color.grey))
        }
    }

    private var lastSelected: Int = -1
    private fun activateTabs(){
        tabs.apply {
            isEnabled = true
            touchables?.forEach {
                it.isEnabled = true
                it.alpha = 1f
            }
            setSelectedTabIndicatorColor(ContextCompat.getColor(tabs.context, R.color.colorTab))

            if (lastSelected == -1){
                //default tab
                getTabAt(0)?.select()
            } else {
                getTabAt(lastSelected)?.select()
            }
        }
    }

另外,childCount 与我的 TabLayout 中的 tabCount 不同,这在 Android 中是完全奇怪的行为。我在TabLayout 内的布局xml 中添加了选项卡,因此它应该算作它的子级。但是childCount 是 1,tabCount 是 2。

我完全没有这种行为。

【问题讨论】:

    标签: android android-layout android-tablayout


    【解决方案1】:

    几个小时后,我通过将Tabs 保存为可触摸Views 解决了这个问题。

    我无法直接更改状态。我必须保存可触摸的东西,它创建了克隆(带指针)。我改变了那些而不是真实的。

    更新代码:

    private fun deactivateTabs(){
            tabs.apply {
                tabsAsTouchables = touchables
                tabsAsTouchables.forEach {
                    it.isEnabled = false
                    it.alpha = .5f
                }
                setSelectedTabIndicatorColor(ContextCompat.getColor(tabs.context, R.color.grey))
            }
        }
    
        private var lastSelected: Int = -1
        private var tabsAsTouchables: List<View> = emptyList()
        private fun activateTabs(){
            tabs.apply {
                tabsAsTouchables.forEach {
                    it.isEnabled = true
                    it.alpha = 1f
                }
                setSelectedTabIndicatorColor(ContextCompat.getColor(tabs.context, R.color.colorTab))
    
                if (lastSelected == -1){
                    //default tab
                    getTabAt(TAB_HISTORY)?.select()
                } else {
                    getTabAt(lastSelected)?.select()
                }
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2021-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-08
      相关资源
      最近更新 更多