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.
- Comportamiento de menú de opciones extraño en Android TabActivity
- Fragmentos no visibles después de cambiar tabulación en FragmentTabHost anidado
- InputMethodManager contiene referencia al tabhost - Memory Leak - OOM Error
- Java.lang.IllegalStateException: Sin actividad
- ¿Cómo cambiar o cambiar entre las pestañas en la distribución gráfica sdk de Android?
¿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.
- Android: TabHost sin TabActivity
- FragmentTabHost - No se conoce ninguna pestaña null
- Android, la intención no funciona?
- Pestañas personalizadas en android
- Barra de título de Android dejando espacio cuando se reanuda la aplicación
- Las pestañas TabHost de Android roban el enfoque al utilizar el teclado de hardware
- Cómo implementar el menú de pestaña de Android sin tabhost obsoleto
- Android elimina el espacio entre las pestañas de tabwidget
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.