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 Comentarios

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

    Si usted todavía está utilizando TabWidgets en >14, ver http://code.google.com/p/android/issues/detail?id=2267. Los últimos comentarios apuntan a la iosched2011 y de hecho hay que reemplazar toda la vista de la TabIndicator. Excepto por un par de propiedades (general, de fondo, de texto), de cualquier manera sencilla parece roto y esta complejidad es necesario.

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

Dejar respuesta

Please enter your comment!
Please enter your name here