Estilo personalizado para Android TabWidget

Estoy usando pestañas en mi app de Android, y me he topado con este problema cuando se ejecuta la aplicación en HTC Sense teléfonos:

Android: Resaltado ficha de TabWidget no legible en HTC Sense

La solución que propuso allí (configuración de android:targetSdkVersion 4) no soluciona el problema para mí, y yo tampoco quiero establecer el target sdk 4.

En lugar de eso he tratado de solucionar este problema, a mi la creación de mi propia pestaña estilo de widget, y modificar el color del texto. El problema es que no hay ninguna diferencia notable cuando puedo usar mi propio estilo; es decir, el estilo no parece aplicarse a las pestañas.

Este es el código de la actividad principal, la celebración de las fichas:

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);
}

Este es mi tab.xml. Aviso que he especificado MyTabStyle como el estilo de TabWidget:

<?xml version="1.0" encoding="utf-8"?>
<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">
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:padding="5dp">
        <TabWidget
            style="@style/MyTabStyle"
            android:id="@android:id/tabs"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" />
        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:padding="5dp" />
    </LinearLayout>
</TabHost>

Y esta es mi definición de MyTabStyle, que he definido en res/values/styles.xml:

<style name="MyTabStyle" parent="@android:style/TextAppearance.Widget.TabWidget">
    <item name="android:textColor">#5DFC0A</item>
</style>

¿Por qué no hacer cambios en MyTabStyle mostrar en mi app? Otras soluciones para resolver el texto invisible en fichas seleccionadas en HTC Sense?

ACTUALIZACIÓN 2011-06-02

Me las arreglé para resolver esto en una especie de hacky manera, utilizando el conocimiento de que el texto en las fichas son en realidad TextViews. Agregue el método siguiente a su actividad:

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.
    }
}

Agregar lo siguiente en el onCreate() en el método de su actividad:

//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);
        }
    });
}
  • Relacionados, pero no es exactamente un duplicado, pero tiene una mejor (la más reciente?) respuesta de cómo el estilo de la TabWidget: stackoverflow.com/a/2805256/2291
InformationsquelleAutor gizero | 2010-11-08

3 Kommentare

  1. 11

    Este hombre ha publicado una manera de personalizar todo acerca de la ficha bastante. Funciona con Android 1.6 y superior: Personalizada De Android Pestañas.

    Yo no lo he probado todavía, pero llegar allí. Básicamente, la llamada setIndicator en su TabSpec y pasar a una vista en lugar de sólo texto. A continuación, puede personalizar la vista mediante los selectores, etc.

    • pero, lamentablemente, todavía necesitará al menos min sdk4 para esto.
    • «Este tipo» es que me.
  2. -6

    <!-- Focused states -->
    <item android:state_focused="true" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/tab_focus" />
    <item android:state_focused="true" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/tab_focus" />
    
    <!-- Pressed -->
    <item android:state_pressed="true" android:drawable="@drawable/tab_press" />

    • ¿Cómo esta la respuesta a mi pregunta?
    • Porque esta es la forma en que el estilo de una Ficha.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Recent Articles

Python «set» con duplicados/elementos repetidos

Hay una forma estándar de representar un "conjunto" que puede contener elementos duplicados. Como yo lo entiendo, un conjunto tiene exactamente un cero o...

Python: generador de expresión vs rendimiento

En Python, ¿hay alguna diferencia entre la creación de un generador de objetos a través de un generador de expresión versus el uso de...

Cómo exportar/importar la Masilla lista de sesiones?

Hay una manera de hacer esto? O tengo que tomar manualmente cada archivo de Registro? InformationsquelleAutor s.webbandit | 2012-10-23

no distingue mayúsculas de minúsculas coincidentes en xpath?

Por ejemplo, para el xml a continuación <CATALOG> <CD title="Empire Burlesque"/> <CD title="empire burlesque"/> <CD...