Android: L'Onglet Modifier La Couleur Du Texte Par Programmation
J'ai un TabHost comme ceci:
<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@android:id/tabhost"
android:background="@drawable/tabs_bg">
<LinearLayout
android:id="@+id/LinearLayout01"
android:orientation="vertical"
android:layout_height="fill_parent"
android:layout_width="fill_parent">
<TabWidget
android:id="@android:id/tabs"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_marginBottom="5dip">
</TabWidget>
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_height="fill_parent"
android:layout_width="fill_parent">
</FrameLayout>
</LinearLayout>
Et je suis ajoutant des onglets pour ce TabHost par programme comme ceci:
tabHost = (TabHost)findViewById(android.R.id.tabhost);
tabHost.setOnTabChangedListener(this);
/* tid1 is firstTabSpec Id. Its used to access outside. */
TabSpec firstTabSpec = tabHost.newTabSpec("tid1");
TabSpec secondTabSpec = tabHost.newTabSpec("tid2");
TabSpec ThirdTabSpec = tabHost.newTabSpec("tid3");
/* TabSpec setIndicator() is used to set name for the tab. */
/* TabSpec setContent() is used to set content for a particular tab. */
firstTabSpec.setIndicator("Tab1", getResources().getDrawable(R.drawable.tab1));
secondTabSpec.setIndicator("Tab2", getResources().getDrawable(R.drawable.tab2));
ThirdTabSpec.setIndicator("Tab3", getResources().getDrawable(R.drawable.tab3));
firstTabSpec.setContent(new Intent(this,FirstTab.class));
secondTabSpec.setContent(new Intent(this,SecondTab.class));
ThirdTabSpec.setContent(new Intent(this,ThirdTab.class));
/* Add tabSpec to the TabHost to display. */
tabHost.addTab(firstTabSpec);
tabHost.addTab(secondTabSpec);
tabHost.addTab(ThirdTabSpec);
for(int i=0;i<tabHost.getTabWidget().getChildCount();i++)
{
tabHost.getTabWidget().getChildAt(i).setBackgroundColor(Color.parseColor("#121312"));
}
tabHost.getTabWidget().setCurrentTab(0);
tabHost.getTabWidget().getChildAt(0).setBackgroundColor(Color.parseColor("#f1a026"));
Et voici onTabChanged Événement:
public void onTabChanged(String tabId) {
//TODO Auto-generated method stub
for(int i=0;i<tabHost.getTabWidget().getChildCount();i++)
{
tabHost.getTabWidget().getChildAt(i).setBackgroundColor(Color.parseColor("#121312"));
}
tabHost.getTabWidget().getChildAt(tabHost.getCurrentTab()).setBackgroundColor(Color.parseColor("#f1a026"));
}
Dans onTabChanged cas, je veux aussi changer la couleur du texte de tous les onglets. S'il vous plaît aider moi comment puis-je changer la couleur du texte des onglets dans l'événement?
Merci,
OriginalL'auteur Mudasser Hassan | 2011-04-07
Vous devez vous connecter pour publier un commentaire.
Pour changer la couleur du texte des onglets, vous avez besoin pour obtenir le point de vue, je.e TextView qui est défini comme le titre des onglets et vous pouvez le modifier comme ceci:
espère que cela aide....
il n'y a rien dont l'id est "titre" dans mon code. Veuillez consulter mon code et laissez-moi savoir ce que je doit remplacer android.R.id.le titre?
comme je l'ai dit lors de l'utilisation d'onglets, il est automatiquement ajouté par le cadre.... ses comme lorsque vous définissez le texte dans setIndicator(premier argument), ce texte est définie sur un textview avec id d'android.R.id.titre.... simplement obtenir et de modifier la couleur...
merci beaucoup, ça a résolu mon problème. J'ai essayé cela avant, mais avant j'avais accès à mon TabHost comme
code
tabHost=(TabHost)findViewById(android.R.id.tabhost);code
, puis en essayant de changer les couleurs que vous avez décrit, mais ma demande a toujours été de s'écraser. Maintenant, j'ai changé cette déclaration commecode
tabHost=getTabHost();code
et sa fonctionne très bien maintenant. Je ne comprends pas la différence entre les deux. Pouvez-vous me dire la différence entre les deux? Mercibien essayer avec votre code, mais avec un peu de changement... j'.e tabHost = (TabHost)findViewById(R. id.tabhost); et c si cela fonctionne... si oui, alors vous devriez obtenir le point que je veux dire....
OriginalL'auteur Farhan
Pour la nouvelle conception de support de l'onglet mise en page; vous pouvez le définir dans votre xml
app:tabTextColor="@color/tab_inactive" app:tabSelectedTextColor="@color/tab_active"
E. g. -
Par programmation, il peut être obtenu comme ceci:
réponse parfaite . même si c'est un problème différent, je veux juste souligner que textAllCaps="false" nous voyons dans l'exemple n'a actuellement aucun effet , pour atteindre le comportement de la suppression du plafond, vous devrez créer un nouveau style et de l'affecter à la tablayout , découvrez la question ci-dessous stackoverflow.com/questions/31295116/...
merci pour elle @A. Alqadomi. J'ai collé le code extrait de mon travail de l'échantillon, de sorte que le code est là, qui n'a rien à voir avec la réponse.
Est-il un moyen de changer la couleur sans stateList?
OriginalL'auteur AnswerDroid
Pour moi @Farhan 's solution n'a pas fonctionné depuis
getChildCount()
cesse de revenir1
tout en ayant quatre onglets. À l'aide degetTabCount()
etgetChildTabViewAt()
résolu pour moi:Je pensais que je poste cette alternative pour les personnes ayant le même problème.
OriginalL'auteur spes
Lorsque vous utilisez findViewById(id) que vous demandez au système de chercher à tout point de Vue avec l'id "id" relativement à l'actuel ViewGroup. Cela signifie que ce que vous faites dans votre code est ce.findViewById(id), donc il va chercher les "id" dans la Vue actuelle. Et de faire findViewById(android.R.id.tabHost) n'est pas très intelligent, car il n'existe tout simplement pas...
Lorsque vous ne getTabHost() cependant, vous demandez au système pour obtenir le unique tabHost de votre activité, peu importe, il ont tout point de Vue en tant que root, c'est à dire la tabHost peut être attaché à rien envers elle.
En conclusion, vous devez toujours nous getTabHost dans votre TabHostActivity
Espère que j'ai été clair
OriginalL'auteur Nabil Gardon