Я знаю, что API 3 не позволяет представлению быть установленным для вкладки, но я все еще должен изменить TextView, отображенный как индикатор. Я также хотел бы изменить Drawable для вкладки, но я не вижу способ сделать это без пользовательского представления вкладки, как позволено в 1,6, API 4.
При работе с этим универсальным примером ниже, там способ получить TextView и изменить его свойства или изменить drawable?
TabHost tabHost = getTabHost();
TabHost.TabSpec spec;
spec = tabHost.newTabSpec("nearby")
.setIndicator("Nearby Activity")
.setContent(R.id.nearby_list);
tabHost.addTab(spec);
spec = tabHost.newTabSpec("friends")
.setIndicator("Friends & Favorites")
.setContent(R.id.friends_list);
tabHost.addTab(spec);
tabHost.setCurrentTabByTag("nearby");
Спасибо за любую справку.
, чтобы изменить значок:
.setIndicator("Friends & Favorites",getResources().getDrawable(R.drawable.myTabIcon))
, чтобы изменить TabBackground Drawable ::
tabHost.getTabWidget().getChildAt( index of tab ).setBackgroundResource(R.drawable.mytab_Newbackground);
, чтобы получить Textview, проверьте образец Франческо
ViewGroup v = (ViewGroup) tabHost.getTabWidget().getChildAt( index of tab );
TextView tv = (TextView)v.getChildAt(1);
Log.d("Tab's text = ",tv.getText().toString());
Поскольку Tabwidget является обычной группой просмотра, я думаю, вам следует получить доступ к все его дети. Что-то вроде этого должно сработать:
tabHost.setOnTabChangedListener(this);
....
...
@Override
public void onTabChanged(String tabId) {
int count = tabHost.getTabWidget().getChildCount();
for (int i = 0; i < count; i++){
ViewGroup v = (ViewGroup) tabHost.getTabWidget().getChildAt(i); //Should be a relative layout
TextView tv = (TextView)v.getChildAt(1); //At position 0 should be the ImageView
Log.d("onTabChanged",tv.getText().toString());
}
}
Возможно, вам придется поиграть с положением индексов, чтобы найти правильное представление.