Изменение стиля текста в стиле tabhost Android
Попытка изменить цвет текста табона, в этом коде я могу изменить цвет фона табус (не цвет текста)
tabHost.setOnTabChangedListener(new OnTabChangeListener() {
@Override
public void onTabChanged(String tabId) {
for (int i = 0; i < tabHost.getTabWidget().getChildCount(); i++) {
tabHost.getTabWidget().getChildAt(i)
.setBackgroundColor(Color.parseColor("#FF0000")); // unselected
}
tabHost.getTabWidget().getChildAt(tabHost.getCurrentTab())
.setBackgroundColor(Color.parseColor("#0000FF")); // selected
}
});
как я могу изменить цвет текста табуляции?
Ответы
Ответ 1
Вы можете изменить цвет текста в Tabhost, как показано ниже.
tabHost.setOnTabChangedListener(new OnTabChangeListener() {
@Override
public void onTabChanged(String tabId) {
for (int i = 0; i < tabHost.getTabWidget().getChildCount(); i++) {
tabHost.getTabWidget().getChildAt(i).setBackgroundColor(Color.parseColor("#FF0000")); // unselected
TextView tv = (TextView) tabhost.getTabWidget().getChildAt(i).findViewById(android.R.id.title); //Unselected Tabs
tv.setTextColor(Color.parseColor("#ffffff"));
}
tabHost.getTabWidget().getChildAt(tabHost.getCurrentTab()).setBackgroundColor(Color.parseColor("#0000FF")); // selected
TextView tv = (TextView) tabhost.getCurrentTabView().findViewById(android.R.id.title); //for Selected Tab
tv.setTextColor(Color.parseColor("#000000"))
}
});
EDIT:
Чтобы установить цвет текста изначально в вашей деятельности, вы можете использовать этот код в onResume()
function
TabHost tabhost = getTabHost();
for(int i=0;i<tabhost.getTabWidget().getChildCount();i++)
{
TextView tv = (TextView) tabhost.getTabWidget().getChildAt(i).findViewById(android.R.id.title);
tv.setTextColor(Color.parseColor("#000000"));
}
Ответ 2
Чтобы изменить цвет текста вкладок, вам нужно получить представление i.e TextView, которое задано как заголовок вкладок, и вы можете изменить его следующим образом:
TabHost tabhost = getTabHost();
for(int i=0;i<tabhost.getTabWidget().getChildCount();i++)
{
TextView tv = (TextView) tabhost.getTabWidget().getChildAt(i).findViewById(android.R.id.title);
tv.setTextColor(Color.parseColor("#000000"));
}
EDIT:
Другим способом является создание пользовательского представления для ваших вкладок. при добавлении вкладок на вкладку tabHost
FragmentTabHost tabHost;
tabHost = (FragmentTabHost) findViewById(android.R.id.tabhost);
tabHost.setup(this, getSupportFragmentManager(), R.id.frame);
//создаем customView для каждой вкладки Просмотреть tabViewHome = createTabView (tabHost.getContext(), "Главная", R.drawable.ic_home);
tabHost.addTab(tabHost.newTabSpec("Home").setIndicator(tabViewHome), HomeActivity.class, null);
private static View createTabView(final Context context, final String text, int iconId)
{
// inflate your layout here
View view = LayoutInflater.from(context).inflate(R.layout.tab_layout, null);
TextView tv = (TextView) view.findViewById(R.id.tab_tv_title);
tv.setText(text);
tv.setTextColor(Color.RED);
ImageView iv = (ImageView) view.findViewById(R.id.tab_background_iv_icon);
iv.setImageResource(iconId);
return view;
}
и ваш tab_layout.xml будет выглядеть следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tabsLayout"
android:layout_width="fill_parent"
android:layout_height="40dip"
android:gravity="center"
android:orientation="vertical"
android:padding="5dip"
android:background="#AAE1E1E1">
<ImageView
android:id="@+id/tab_background_iv_icon"
android:layout_width="30dip"
android:layout_height="30dip"
android:contentDescription="@string/imgDesc"
/>
<TextView
android:id="@+id/tab_tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
//android:textColor="@drawable/tab_text_selector"
android:textSize="8sp"
android:textStyle="bold" />
</LinearLayout>
Надеюсь, что это поможет.
Ответ 3
Это можно сделать с помощью тем XML. TabWidget
использует android:textColorPrimary
для выбранной вкладки и android:textColorSecondary
для невыбранных. Таким образом, вы можете добиться изменения цвета текста следующим образом:
В styles.xml:
<style name="TabWidgetTheme" parent="AppTheme">
<item name="android:textColorPrimary">@color/your_primary_color</item>
<item name="android:textColorSecondary">@color/your_secondary_color</item>
</style>
В вашем макете:
<TabHost
android:layout_height="match_parent"
android:layout_width="match_parent"
android:theme="@style/TabWidgetTheme"/>
Обратите внимание, что android:theme
не должен быть непосредственно в TabWidget
, а содержать TabHost
или аналогичный.
Ответ 4
Ehi man, я использовал это решение для:
private void setNewTab(final String tag, final String title, final Class<?> clazz, final Bundle bundle) {
TabHost.TabSpec tabSpec = tabHost.newTabSpec(tag);
tabSpec.setIndicator(InfoTabView_.build(getActivity()).bind(title, false));
tabHost.addTab(tabSpec, clazz, bundle);
}
...
bundle = new Bundle();
bundle.putSerializable(FaqFragment.ARG_FAQS, infos.getFaq());
setNewTab("faq", "Faq", FaqFragment_.class, bundle);
...
@EViewGroup(R.layout.view_info_tab)
public class InfoTabView extends RelativeLayout {
....
@Override
public void setSelected(final boolean selected) {
if (selected)
titleTextView.setTextColor(selectedColor);
else
titleTextView.setTextColor(unselectedColor);
}
}
override setSelected - самый чистый способ!