2009-12-15 6 views
6

J'ai une application qui cible le cadre 1.5 et utilise le thème de la lumière par défaut. Lorsque vous utilisez un widget d'onglet avec ce thème, les images des onglets sont à peine visibles et les légendes des onglets sont tout à fait impossibles à discerner, à l'exception de l'onglet actuellement actif.Android TabWidget dans le thème Lumière

Dans le thème sombre par défaut, ces onglets apparaissent assez clairement, mais ce n'est pas une solution dont je serais très heureux. Y a-t-il un paramètre simple que je peux définir, qui configure le widget d'onglet pour une meilleure visibilité dans les thèmes légers, ou devrais-je altérer les images et les styles de texte manuellement?

Répondre

10

Ce n'est pas joli, mais vous pouvez l'essayer dans votre activité de tabulation.

// light theme support 
final TabHost tabHost = getTabHost(); 
tabHost.setBackgroundColor(Color.WHITE); 
tabHost.getTabWidget().setBackgroundColor(Color.BLACK); 

// hack to set font size 
LinearLayout ll = (LinearLayout) tabHost.getChildAt(0); 
TabWidget tw = (TabWidget) ll.getChildAt(0); 

// first tab 
RelativeLayout rllf = (RelativeLayout) tw.getChildAt(0); 
lf = (TextView) rllf.getChildAt(1); 
lf.setTextSize(21); 
lf.setPadding(0, 0, 0, 6); 

// second tab 
RelativeLayout rlrf = (RelativeLayout) tw.getChildAt(1); 
rf = (TextView) rlrf.getChildAt(1); 
rf.setTextSize(21); 
rf.setPadding(0, 0, 0, 6); 

/res/values/colors.xml devrait avoir

<resources> 
    <drawable name="black">#ff000000</drawable> 
    <drawable name="white">#ffffffff</drawable> 
</resources> 

AndroidManiest.xml devrait avoir

<application android:theme="@android:style/Theme.Light"> 

si vous voulez faire quelque chose plus fou, essayez http://ezmobile.wordpress.com/2009/02/02/customized-android-tabs/

+1

oui, cela devra faire. Je veux garder un look aussi natif que possible, donc je ne vais pas me lancer dans des graphismes personnalisés. essentiellement, mettre la couleur de fond du tabwidget en noir était tout ce qu'il fallait pour rendre les onglets visibles. le reste est déjà blanc du thème principal de l'application, donc je n'ai pas fait d'autres configurations. Quant aux ressources/couleurs; comment se fait-il que vous définissiez vos propres couleurs ici? N'est-ce pas le même noir que dans 'android.graphics.Color.BLACK'? ou ne voulez-vous pas importer cette bibliothèque entière, pour seulement deux couleurs? –

+0

J'ai plus de couleurs dans mon fichier de couleurs - je voulais rendre le post nettoyeur :) – yanokwa

+0

J'ai essayé cette solution mais en éclipse les GlobalConstants sont soulignés en rouge. l'erreur lit., "GlobalConstants ne peut pas être résolu". Dois-je déclarer GlobalConstants ou l'importer? –

2

Ceci est un bug; pouvez-vous le signaler dans le the issue tracker? AFAIK, votre solution de contournement de la personnalisation des styles de texte et d'image semble correcte.

Il est également à noter que le widget de tabulation dans 2.0 ne semble pas avoir un style léger.

2

En utilisant l'outil hierarchyviewer, j'ai trouvé l'identifiant android pour le texte dans l'onglet. Une meilleure façon de modifier les propriétés du texte (y compris la couleur) est en procédant comme suit ...

TabWidget tw = (TabWidget)tabHost.findViewById(android.R.id.tabs); 
View tabView = tw.getChildTabViewAt(0); 
TextView tv = (TextView)tabView.findViewById(android.R.id.title); 
tv.setTextSize(20); 
2

Une façon très simple pour résoudre le problème de couleur/contraste dans la mise en page:

<TabWidget 
    android:id="@android:id/tabs" 
    android:background="#FF000000" 
    android:padding="2dp" 

Cette définit l'arrière-plan du TabWidget au noir et ajoute un peu de rembourrage de sorte que vous avez un contraste avec les onglets sur le fond noir. Ce n'est pas parfait, mais fonctionne en 1.5, 2.2, thème clair et sombre.

Questions connexes