9

タブのテキストビューをプログラムで変更したい。これを行う方法はありますか?

古い TabHost ビューに関する回答のみがあります。Google のマテリアル デザイン ライブラリで使用されている TabLayout を使用しています。android.support.design.widget.TabLayout.

TabHost の場合: タブ ラベルにパディングを追加する方法は?

4

7 に答える 7

17

これは実用的なソリューションです

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

最後のインデックス ゼロ1に変更するだけで、上記のコードが機能します

クラッシュを削除

java.lang.ClassCastException: android.widget.ImageView cannot be cast to android.widget.TextView
于 2016-02-16T13:02:59.847 に答える
8

特定のタブで:

 int wantedTabIndex = 0;
 TextView tv = (TextView)(((LinearLayout)((LinearLayout)mTabLayout.getChildAt(0)).getChildAt(wantedTabIndex)).getChildAt(0));
 tv.setText("Hello world!");
于 2015-07-08T00:15:29.947 に答える
6
    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 であるすべての子を見つけて、すべて大文字モードをオフに設定します。他のすべての非常に特殊な型キャストを回避します。動作していないように見える場合は、コードの後半で呼び出します。私はonCreateでそれを持っていましたが、うまくいきませんでした。後でコードで呼び出すと、完全に機能しました。

1 つだけでなく、すべてのタブに影響しますが、これが最も一般的な使用法だと思います。TabLayout に固有のものでもありません。変更したい TextView を含む任意のレイアウトに使用できます。

于 2015-12-02T15:57:22.100 に答える
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
于 2016-11-07T10:55:31.557 に答える