获取TabLayout选项卡的textview

时间:2015-07-08 00:15:30

标签: android tabs material-design android-tablayout

我想以编程方式更改标签的文本视图。有没有办法做到这一点?

仅有关于旧TabHost视图的答案,我正在使用Google使用android.support.design.widget.TabLayout.

的材质设计库使用的TabLayout

对于TabHost: How to add padding to a tabs label?

7 个答案:

答案 0 :(得分:13)

这是有效的解决方案

int wantedTabIndex = 0;
TextView tv = (TextView)(((LinearLayout)((LinearLayout)mTabLayout.getChildAt(0)).getChildAt(wantedTabIndex)).getChildAt(1));
tv.setText("Hello world!");

只需将最后一个索引更改为一个,现在上面的代码就可以了

删除崩溃

java.lang.ClassCastException: android.widget.ImageView cannot be cast to android.widget.TextView

答案 1 :(得分:5)

使用给定标签:

 int wantedTabIndex = 0;
 TextView tv = (TextView)(((LinearLayout)((LinearLayout)mTabLayout.getChildAt(0)).getChildAt(wantedTabIndex)).getChildAt(0));
 tv.setText("Hello world!");

答案 2 :(得分:3)

    public static void setTextViewsCapsOff(View view) {
        if (!(view instanceof ViewGroup)) {
            return;
        }
        ViewGroup group = (ViewGroup)view;
        for (int i = 0; i < group.getChildCount(); i++) {
            View child = group.getChildAt(i);
            if (child instanceof TextView) {
                ((TextView)child).setAllCaps(false);
            } else {
                setTextViewsCapsOff(child);
            }
        }
    }

将TabLayout传递给此递归方法。它将找到任何TextView的子项并关闭其All Caps模式。避免所有其他非常特定的类型转换。如果它似乎不起作用,请稍后在您的代码中调用它。我在onCreate中有它,但是没有用。稍后在代码中调用它并且它工作得很好。

影响所有标签,不只是一个,但我认为这是最常见的用法。也不是特定于TabLayout。可用于包含要更改的TextView的任何布局。

答案 3 :(得分:1)

这对我有用:

tabLayout.getTabAt(0).setText("some text");

0替换为您要编辑的标签的索引。我认为您的tabLayout需要在调用之前填充,否则tablayout.getTabAt(0)将返回null

答案 4 :(得分:0)

我认为最好的办法是使用TextView创建自定义布局,然后将自定义视图分配给要编辑的选项卡

final TabLayout.Tab tabAt = tabLayout.getTabAt(index);
tabAt.setCustomView(myLayoutId);

通过这种方式,您可以使用布局中的TextView执行任何操作

答案 5 :(得分:0)

onTabSelectedListener 添加到tabLayout以动态设置文本。 所以在这种方法中,当选项卡被选中时,文字将变为“选中”或其他标签

 tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            tab.getCustomView().setAlpha(1.0f);
            ((TextView) tab.getCustomView()).setTextSize(12);
            ((TextView) tab.getCustomView()).setText("Selected");
            Log.d("TabBar", "selected");
        }

        @Override
        public void onTabUnselected(TabLayout.Tab tab) {
            tab.getCustomView().setAlpha(0.3f);//to set alpha 

            ((TextView) tab.getCustomView()).setTextSize(11);
            ((TextView) tab.getCustomView()).setText("DeSelected");
            Log.d("TabBar", "unselected");
        }

        @Override
        public void onTabReselected(TabLayout.Tab tab) {
            Log.d("TabBar", "reselected");
        }
    });

将选项卡设置为默认选择,然后使用此语句

tabLayout.getTabAt(0).select(); //this is used to set tab as default

答案 6 :(得分:0)

凯文的回答很棒! (https://stackoverflow.com/a/34047188/7699617)。依靠这个答案,我实现了在 TextView 中应用 Kotlin 的任何更改:

private fun applyForTextView(parent: ViewGroup, func: (TextView) -> Unit) {
    for (i in 0 until parent.childCount) {
        when (val child = parent.getChildAt(i)) {
            is TextView -> func(child)
            is ViewGroup -> applyForTextView(child, func)
        }
    }
}

如何使用:

applyForTextView(tabLayout) { it.isAllCaps = false }