Buscando un estilo TabHost universal que funcione en Android, HTC Sense, Samsung, etc. skins

El estilo predeterminado para Android TabHost funciona bien para los sistemas Android rectos. Sin embargo, en HTC Sense, utilizan texto oscuro sobre un fondo oscuro, que es ilegible.

TabHost de HTC Sense UI

¿Cuál es la forma más fácil de tener un TabHost que tiene texto visible a través de todos los diferentes sabores de las pieles de Android? Yo preferiría no tener que hacer una apariencia completamente personalizada si es posible.

Mi targetSDK es 10 y mi minSDK es 7.

Te daré el consejo para obtenerte completamente independiente de la TabWidget y crear tu propia Navegación, que puedes personalizar como quieras y no te molestes con la rígida TabWidget. No me refiero a tirar el TabHost impresionante, porque es fácil de usar el TabHost con una navegación personalizada:

Primero establezca su TabWidget como desaparecido:

<TabHost xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/tabhost" android:layout_width="fill_parent" android:layout_height="fill_parent"> <RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent"> <TabWidget android:id="@android:id/tabs" android:layout_width="fill_parent" android:layout_height="wrap_content" android:visibility="gone"/> 

Y luego crear tu propia navegación en lugar de ella. También puede crear un menú (con el botón de menú Hardware) o algo similar:

 <TabHost xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/tabhost" android:layout_width="fill_parent" android:layout_height="fill_parent"> <RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent"> <TabWidget android:id="@android:id/tabs" android:layout_width="fill_parent" android:layout_height="wrap_content" android:visibility="gone"/> <!-- content of your tabs--> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_above="@id/slider_stub" android:background="@color/overview_banner_bg_down"/> <!-- custom slider with horizontal scrollable radio buttons--> <com.example.WrappingSlidingDrawer android:id="@+id/tab_slider" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:handle="@+id/tab_slider_handle" android:content="@+id/tab_scroller"> <RelativeLayout android:id="@+id/tab_slider_handle" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/def_slider"> </RelativeLayout> <HorizontalScrollView android:id="@+id/tab_scroller" android:layout_width="fill_parent" android:layout_height="wrap_content" android:fadeScrollbars="false" android:scrollbarAlwaysDrawHorizontalTrack="true" android:scrollbarTrackHorizontal="@drawable/scrollbar_horizontal_track" android:scrollbarThumbHorizontal="@drawable/scrollbar_horizontal_thumb" android:fillViewport="true" android:scrollbarSize="3dip" android:fadingEdgeLength="80dp" android:background="#343534"> <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content"> <RadioGroup android:id="@+id/custom_tabs" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:gravity="center" android:orientation="horizontal" android:checkedButton="@+id/tab_overview"> <RadioButton android:id="@+id/tab_overview" android:layout_height="55dp" android:layout_width="55dp" android:button="@null" android:background="@drawable/def_checktab_overview"/> <RadioButton android:id="@+id/tab_news" android:layout_height="55dp" android:layout_width="55dp" android:button="@null" android:background="@drawable/def_checktab_news"/> .....etc....your tabs...... </RadioGroup> </RelativeLayout> </HorizontalScrollView> </com.example.WrappingSlidingDrawer> </RelativeLayout> </TabHost> 

Lo que tienes que hacer en código ahora:

 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_tab_layout); setTabs(); RadioGroup tabs = (RadioGroup) findViewById(R.id.custom_tabs); tabs.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { switch (checkedId) { case R.id.tab_overview: getTabHost().setCurrentTab(0); break; case R.id.tab_news: getTabHost().setCurrentTab(1); break; ....etc..... } } }); } /** * Delegate tab creation and adding. */ private void setTabs() { // add the necessary tabs addTab(R.string.tab_overv_tag, OverviewActivityGroup.class); addTab(R.string.tab_news_tag, NewsActivityGroup.class); .....etc..... } /** * Create a tab with an Activity and add it to the TabHost * * @param tagId * resource id of the string representing the tag for finding the tab * @param activity * the activity to be added */ private void addTab(int tagId, Class<? extends ActivityGroup> activity) { // create an Intent to launch an Activity for the tab (to be reused) Intent intent = new Intent().setClass(this, activity); // initialize a TabSpec for each tab and add it to the TabHost TabHost.TabSpec spec = usedTabHost.newTabSpec(getString(tagId)); // use layout inflater to get a view of the tab to be added View tabIndicator = getLayoutInflater().inflate(R.layout.tab_indicator, getTabWidget(), false); spec.setIndicator(tabIndicator); spec.setContent(intent); usedTabHost.addTab(spec); } 

Todo el material del indicador no es necesario btw. ^^ En tu ActivityGroups tienes que establecer las Actividades apropiadas, etc. Conoces las cosas.

Usted puede utilizar cualquier cosa para su navegación y todavía puede utilizar las ventajas de un TabHost. Simplemente no te molestes con ese TabWidget ya. 😉

Después de algunas investigaciones, creo que la mejor opción sería usar la interfaz con pestañas de ActionBar, ya que parece mucho más fácil de diseñar. ActionBarSherlock proporciona la capa de compatibilidad para ActionBar para dispositivos que empiezan desde Android 1.6. Aquí puede ver ejemplos sobre lo que puede obtener usando la biblioteca.

  • Android TabHost - Actividades dentro de cada pestaña
  • Actividad de Android Refresh cuando vuelve a ella
  • Obtener índice de la pestaña seleccionada en tabHost
  • Android FragmentTabHost - ¿Todavía no está completamente horneado?
  • Android - FragmentTabHost me da "No se conoce ninguna pestaña para la etiqueta null"
  • Quitar fragmento antiguo del gestor de fragmentos
  • Android usando viewPager vs usando tabhost
  • Cómo implementar pestañas ahora que TabActivity está obsoleto
  • Android - Tabhost trabajando en la clase de actividad
  • Cambiar de TabHost a Fragmentos con Viewpager: Donde poner todo mi código
  • Acceder a TabHost desde otra actividad
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.