2015-07-08 1 views
5

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

Есть ответы только в отношении прежнию TabHost, я использую TabLayout, используемый библиотекой материалов Design Google, используя android.support.design.widget.TabLayout.

Для TabHost: How to add padding to a tabs label?

+0

* комический голос парня парня * «Хуже, вопрос, everrr». Просто шучу, но читайте, как написать хороший вопрос здесь - http://stackoverflow.com/help/how-to-ask. В будущем вы должны включить код, подробное описание и то, что вы уже пробовали. –

+1

В этом контексте довольно сложно предоставить код, и то, что я попробовал, - это ответ ниже, просто поделитесь, потому что получение этого ответа особенно сложно. Подробное описание однако ... – apollow

ответ

2

С данной вкладке:

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

Это сбой с 'java.lang.ClassCastException: android.widget.ImageView не может быть передан в android.widget.TextView' в поддержку lib' 22.2.1' –

+0

Я также использую 22.2.1 через «compile» com.android.support:design:22.2.1 «», дайте мне знать с помощью некоторого кода ... Надеюсь, я смогу вам помочь – apollow

+3

Он работал с: .... getChildAt (1)); – sermilion

2
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, который вы хотите изменить.

0

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

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

Таким образом, вы можете делать все, что вы хотите с TextView, что находится внутри макета

+0

'tabLayout.getTabAt (index);' возвращает ** null ** значение, так как мой макет вкладки изначально пуст –

9

Это работает раствор

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 
+0

, что означает 1. например, у меня есть 2 вкладки. хотите обновить стиль текста на обоих. ??? –

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 
0

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

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

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