Получение текста вкладки TabLayout

Я хочу программно изменить текстовое представление вкладки программно. Есть какой-либо способ сделать это?

Есть ответы только на старое представление TabHost, я использую TabLayout, используемую библиотекой материалов Material, используя 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!"); 

Просто измените последний индекс Zero to One, теперь над кодом будет работать

Удаленный сбой

 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, и отключит режим All Caps. Избегает всех других очень специфических типов. Если он не работает, обратитесь к нему позже в свой код. У меня было это в onCreate, но это не сработало. Вызвали его позже в коде, и он работал отлично.

Влияет на все вкладки, а не только на одну, но я считаю, что это наиболее распространенное использование. Не специфично для TabLayout. Может использоваться для любого макета, содержащего TextViews, который вы хотите изменить.

Я думаю, что самое лучшее, что можно сделать здесь: создать пользовательский макет с помощью TextView, а затем назначить настраиваемый вид вкладкам, которые вы хотите редактировать

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

Таким образом, вы можете делать все, что хотите, с помощью 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 

Это сработало для меня:

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

Замените 0 индексом вкладки, которую вы хотите отредактировать. Я думаю, что ваш tabLayout должен быть заполнен перед вызовом этого, иначе tablayout.getTabAt(0) вернет значение null .