Как изменить текст вкладки Android на лету?
Кажется, что это должно быть просто, но я не могу понять, как это сделать. Мне нужна вкладка, чтобы начинать текст, но после этого текст меняется после того, как пользователь выбирает элемент из списка. Я знаю, как изменить фон и цвета вкладки с помощью
mTabHost.getChildAt(index).setBackgroundColor();
но нет возможности изменить индикатор вкладки. Я попытался использовать EditText.
private EditText tabName;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.statistics);
comm = new Communicator();
tabName = new EditText(this);
tabName.setText("BeginningText");
mTabHost = getTabHost();
mTabHost.addTab(mTabHost
.newTabSpec("tab_1_stat")
.setIndicator(User)
.setContent(R.id.meStatsTab));
mTabHost.addTab(mTabHost
.newTabSpec("tab_2_stat")
.setIndicator(tabName.getText())
.setContent(R.id.themStatsTab));
mTabHost.addTab(mTabHost
.newTabSpec("tab_3_stat")
.setIndicator("Archive")
.setContent(R.id.archiveStatsTab));
mTabHost.setOnTabChangedListener(this);
getTabWidget().getChildAt(1).setOnClickListener(new onThemTabClicked());
mTabHost.setCurrentTab(0);
onTabChanged("tab_1_stat");
}
.....
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
tabName.setText("ChangedTabText");
Bundle extras = intent.getExtras();
themStats = extras.getStringArray("themStats");
mTabHost.setCurrentTab(1);
onTabChanged("tab_2_stat");
}
Это тоже не сработало, а также несколько других попыток. Есть идеи? Спасибо заранее!
Ответы
Ответ 1
Ого. Ладно, это была боль. Очевидно, TabWidget делает что-то напуганное с RelativeLayout, и каждый раз, когда я пытался что-то сделать с решением radek-k, он взорвался ошибкой RelativeLayout. Таким образом, в основном работа заключается в следующем. Он также позволяет изменять шрифт, размер шрифта, цвет шрифта и т.д.
TabWidget vTabs = getTabWidget();
RelativeLayout rLayout = (RelativeLayout) vTabs.getChildAt(tabIndex);
((TextView) rLayout.getChildAt(textIndex)).setText("NewTabText");
или в одной строке...
((TextView)((RelativeLayout)getTabWidget().getChildAt(tabIndex)).getChildAt(textIndex)).setText("NewTabText");
где "textIndex" - это индекс текстового поля. В этом случае это 1. Если вкладка имеет значок или пользовательские изменения, индекс может измениться.
Еще раз спасибо radek-k. Вы определенно заставили меня указывать в правильном направлении.
Ответ 2
попробуйте этот самый простой способ, который работает для меня:
tabLayout.getTabAt(index).setText("TabName");
Ответ 3
Вы можете сделать это, не зная волшебного индекса TextView
, используя findViewById
:
TabWidget vTabs = getTabWidget();
View indicatorView = vTabs.getChildAt(tabIndex);
((TextView) indicatorView.findViewById(android.R.id.title)).setText("NewTabText");
Ответ 4
TabWidget vTabs = .....;
// get desired tab view
View vTab = vTabs.getChildAt(i);
// I guess vTab is instance of TextView
TextView vText = (TextView) vTab;
vText.setText(...);
Ответ 5
Вы можете сделать это так:
TabHost tabHost = getTabHost();
TextView tv = (TextView) tabHost.getTabWidget().getChildAt(0).findViewById(android.R.id.title);
tv.setText("New Tab Text");
Где android.R.id.title
является сгенерированной системой, просто измените ChildIndex и Текст в соответствии с вашими потребностями
Ответ 6
Это просто и легко. Попытайся. Оно работает.
TabWidget tab = (TabWidget) findViewById (R.id.tab1);
((TextView)tab.getChildTabViewAt (1)).setText ("New name here");
Ответ 7
Вот ваш макет:
<com.google.android.material.tabs.TabLayout
android:id="@+id/ref_tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.material.tabs.TabItem
android:id="@+id/ref_book"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<com.google.android.material.tabs.TabItem
android:id="@+id/ref_chpter"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<com.google.android.material.tabs.TabItem
android:id="@+id/ref_verse"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</com.google.android.material.tabs.TabLayout>
Вот ваш код:
TabLayout tabLayout = findViewById(R.id.ref_tabs);
tabLayout.getTabAt(0).setText("BOOK"));
tabLayout.getTabAt(1).setText("CHAPTER"));
tabLayout.getTabAt(2).setText("VERSE"));