启用 TabLayout 未启用 onTouchEvents - 选项卡不可点击
Enabling TabLayout is not enabling onTouchEvents - Tabs not clickable
我有简单的 TabLayout
和 2 Tabs
。一会儿我需要禁用 TabLayout
并禁用用户与 Tabs
的交互。
但是如果我想再次启用它们,它是行不通的。选项卡指示器和 alpha 变回正常,但选项卡对用户交互没有反应。
select()
功能与听众的反应正常,只有与屏幕上的选项卡的物理交互不起作用。
有人遇到过这个问题吗?
enable/disable 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.
我完全没有这种行为。
几个小时后,我通过将 Tabs
保存为可触摸的 Views
解决了这个问题。
我无法直接改变状态。我不得不保存 touchables,它创建了克隆(带指针)。我更改了那些而不是真实的。
更新代码:
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()
}
}
}
我有简单的 TabLayout
和 2 Tabs
。一会儿我需要禁用 TabLayout
并禁用用户与 Tabs
的交互。
但是如果我想再次启用它们,它是行不通的。选项卡指示器和 alpha 变回正常,但选项卡对用户交互没有反应。
select()
功能与听众的反应正常,只有与屏幕上的选项卡的物理交互不起作用。
有人遇到过这个问题吗?
enable/disable 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.
我完全没有这种行为。
几个小时后,我通过将 Tabs
保存为可触摸的 Views
解决了这个问题。
我无法直接改变状态。我不得不保存 touchables,它创建了克隆(带指针)。我更改了那些而不是真实的。
更新代码:
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()
}
}
}