タブのテキストビューをプログラムで変更したい。これを行う方法はありますか?
古い TabHost ビューに関する回答のみがあります。Google のマテリアル デザイン ライブラリで使用されている TabLayout を使用しています。android.support.design.widget.TabLayout.
TabHost の場合: タブ ラベルにパディングを追加する方法は?
タブのテキストビューをプログラムで変更したい。これを行う方法はありますか?
古い TabHost ビューに関する回答のみがあります。Google のマテリアル デザイン ライブラリで使用されている TabLayout を使用しています。android.support.design.widget.TabLayout.
TabHost の場合: タブ ラベルにパディングを追加する方法は?
これは実用的なソリューションです
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
特定のタブで:
int wantedTabIndex = 0;
TextView tv = (TextView)(((LinearLayout)((LinearLayout)mTabLayout.getChildAt(0)).getChildAt(wantedTabIndex)).getChildAt(0));
tv.setText("Hello world!");
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 を含む任意のレイアウトに使用できます。
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