0

我有一个TabLayout我想自定义如下:

  • 如果未选择选项卡项目,则仅显示一个图标
  • 如果选择了选项卡项目,则应显示图标和文本

我已经实现了AOnTabSelectedListener并将文本设置null为未选择选项卡时的文本。当我运行“未选择”选项卡上的文本时,会删除该选项卡,但该选项卡仍处于活动状态,如下图所示:图片

代码:

tabs.addOnTabSelectedListener(object: TabLayout.OnTabSelectedListener{
            override fun onTabReselected(p0: TabLayout.Tab?) {

            }

            override fun onTabUnselected(tab: TabLayout.Tab?) {
                // If I remove this the problem is resolved.
                tab?.text = null
            }

            override fun onTabSelected(tab: TabLayout.Tab?) {
               tab?.text = "Selected"
            }

        })

xml

<com.google.android.material.tabs.TabLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/tabs"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:tabInlineLabel="true"
    app:tabMode="scrollable"
    app:tabGravity="fill">

    <com.google.android.material.tabs.TabItem
        style="@style/Widget.MaterialComponents.TabLayout.Colored"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:icon="@drawable/ic_attach_money_black_24dp"
        android:text="Selected" />
    <com.google.android.material.tabs.TabItem
        style="@style/Widget.MaterialComponents.TabLayout.Colored"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:icon="@drawable/ic_attach_money_black_24dp" />
    <com.google.android.material.tabs.TabItem
        style="@style/Widget.MaterialComponents.TabLayout.Colored"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:icon="@drawable/ic_attach_money_black_24dp"
        />
    <com.google.android.material.tabs.TabItem
        style="@style/Widget.MaterialComponents.TabLayout.Colored"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:icon="@drawable/ic_attach_money_black_24dp" />
    <com.google.android.material.tabs.TabItem
        style="@style/Widget.MaterialComponents.TabLayout.Colored"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:icon="@drawable/ic_attach_money_black_24dp"
        />

</com.google.android.material.tabs.TabLayout>

我已尽我所能找到解决方案,但无济于事。

4

2 回答 2

0

我找到了解决这个问题的方法。我打电话updateTabs()进来onTabSelected()。这是方法:

private fun updateTabs(){
        for (i in 0 until tabs.tabCount){
            tabs.getTabAt(i)?.let {
                it.icon = ActivityCompat.getDrawable(this,tabIcons[i])
                if( it.isSelected){
                    it.text = tabTitles[i]
                }else{
                    it.text = null
                }
            }
        }
    }
于 2018-05-16T12:46:17.230 回答
0

这已在内部修复,并将很快发布新版本的材料设计库。

问题的要点是在内部,选定的选项卡在onTabUnselected()调用之前没有更新。然后通过在该方法中设置选项卡的文本,它也会错误地更新旧的选定选项卡。

于 2018-06-01T15:35:14.950 回答