Я использую вкладки в своем приложении Android, и я столкнулся с этой проблемой при запуске приложения на телефонах HTC Sense:
Android: Выделенная вкладка TabWidget не читается в HTC Sense
Предлагаемое там решение (установка android: targetSdkVersion на 4) не решает проблему для меня, и я не хочу устанавливать для целевого sdk значение 4.
Вместо этого у меня есть попытался решить эту проблему, создав свой собственный стиль виджета вкладок и изменив цвет текста. Проблема в том, что когда я использую свой собственный стиль, заметной разницы нет; то есть стиль не применяется к вкладкам.
Это код для основного действия, содержащего вкладки:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tab);
tabHost = getTabHost();
tabHost.addTab(tabHost.newTabSpec("tab1").setIndicator("Tab 1").setContent(new Intent(this, Tab1.class)));
tabHost.addTab(tabHost.newTabSpec("tab2").setIndicator("Tab 2").setContent(new Intent(this, Tab2.class)));
tabHost.setCurrentTab(0);
}
Это мой tab.xml. Обратите внимание, что я указал MyTabStyle как стиль для TabWidget:
И это мое определение MyTabStyle, которое я определил в res / values / styles.xml:
Почему в моем приложении не отображаются изменения MyTabStyle? Есть ли другие решения для устранения невидимого текста на выбранных вкладках в HTC Sense?
ОБНОВЛЕНИЕ 2011-06-02
Мне удалось решить эту проблему своего рода хакерским способом, зная, что текст на вкладках собственно TextViews. Добавьте в свою операцию следующий метод:
private void setTabColor(TabHost tabHost) {
try {
for (int i=0; i < tabHost.getTabWidget().getChildCount();i++) {
TextView tv = (TextView) tabHost.getTabWidget().getChildAt(i).findViewById(android.R.id.title); //Unselected Tabs
if (tv != null) {
tv.setTextColor(Color.parseColor("#ffffff"));
}
TextView tv2 = (TextView) tabHost.getCurrentTabView().findViewById(android.R.id.title); // Selected Tab
if (tv2 != null) {
tv2.setTextColor(Color.parseColor("#000000"));
}
}
} catch (ClassCastException e) {
// A precaution, in case Google changes from a TextView on the tabs.
}
}
Добавьте в свой метод onCreate () следующую строку:
// Only apply the fix if this is a HTC device.
if (android.os.Build.MANUFACTURER.toLowerCase().contains("htc")) {
// Set up the color initially
setTabColor(tabHost);
// Add a tab change listener, which calls a method that sets the text color.
tabHost.setOnTabChangedListener(new OnTabChangeListener() {
public void onTabChanged(String tabId) {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(tabHost.getApplicationWindowToken(), 0);
setTabColor(tabHost);
}
});
}