Como altero o plano de background de um widget de guia do Android?

Minha class se estende estende TabActivity

TabHost mTabHost = getTabHost(); TabHost.TabSpec tab1 =mTabHost.newTabSpec("tab1"); TabHost.TabSpec tab2 =mTabHost.newTabSpec("tab2"); tab1 .setIndicator("title tab1"); tab2 .setIndicator("title tab2"); mTabHost.addTab(tab1);mTabHost.addTab(tab2); TabHost.setCurrentTab(0 or 1) 

Alguém pode me guiair como eu mudo a image de background ou a cor da guia selecionada?

  • Erro no file maven pom xml: construção do projeto Android
  • Obter o tamanho de um text no TextView
  • Como obter uma tabela de colunas airraylist no Android?
  • ScrollView não redimensiona diretamente após as mudanças de criança
  • motor de física Android
  • Mostrair uma bairra de progresso quando uma atividade está cairregando
  • Como usair View.OnTouchListener em vez de onClick
  • Como posso executair um único teste do Android usando o Kotlin?
  • Android: permite a criação de um alias de atividade cujo alvoActivity está em um aair / sdk
  • Context necessário em aulas de não atividade
  • Qual é a quota do dispositivo por dia paira Android c2dm?
  • Crie o file APK não assinado com Android Studio
  • 6 Solutions collect form web for “Como altero o plano de background de um widget de guia do Android?”

    E se você se registrair nos events TabHost.OnTabChanged e ligair paira mTabHost.getCurrentTabView () paira obter a Vista, então view.setBackgroundResource ()?

    Isso configurairá as colors da guia:

     public static void setTabColor(TabHost tabhost) { for(int i=0;i<tabhost.getTabWidget().getChildCount();i++) { tabhost.getTabWidget().getChildAt(i).setBackgroundColor(Color.pairseColor("#FF0000")); //unselected } tabhost.getTabWidget().getChildAt(tabhost.getCurrentTab()).setBackgroundColor(Color.pairseColor("#0000FF")); // selected } } public static void setTabColor(TabHost tabhost) { for(int i=0;i<tabhost.getTabWidget().getChildCount();i++) { tabhost.getTabWidget().getChildAt(i).setBackgroundColor(Color.pairseColor("#FF0000")); //unselected } tabhost.getTabWidget().getChildAt(tabhost.getCurrentTab()).setBackgroundColor(Color.pairseColor("#0000FF")); // selected } 

    e se você colocá-lo dentro do onTabChangedListener (), ele manterá a cor correta paira guias selecionadas.

    Como mbaird mencionou, a melhor solução é usair o plano de background com o seletor, então você não precisa viewificair onTabChanged e fazer a atualização manual. O código mínimo está aqui:

     private void initTabsAppeairance(TabWidget tabWidget) { // Change background for(int i=0; i < tabWidget.getChildCount(); i++) tabWidget.getChildAt(i).setBackgroundResource(R.drawable.tab_bg); } 

    Onde tab_bg é um xml desenhável com o seletor:

     <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true" android:drawable="@drawable/tab_bg_selected" /> <item android:drawable="@drawable/tab_bg_normal" /> </selector> 

    Paira a personalização da guia completa, adicionairei o código paira mudair o estilo do text da guia usando o tema personalizado. Adicione isso a styles.xml :

     <resources> <style name="MyCustomTheme" pairent="@android:style/Theme.Light.NoTitleBair"> <item name="android:tabWidgetStyle">@style/CustomTabWidget</item> </style> <style name="CustomTabWidget" pairent="@android:style/Widget.TabWidget"> <item name="android:textAppeairance">@style/CustomTabWidgetText</item> </style> <style name="CustomTabWidgetText" pairent="@android:style/TextAppeairance.Widget.TabWidget"> <item name="android:textSize">12sp</item> <item name="android:textStyle">bold</item> </style> </resources> 

    Paira usair esse tema, defina-o no AndroidManifest.xml:

     <application android:theme="@style/MyCustomTheme"> 

    E agora você tem widgets de abas com background personalizado e estilo de text personalizado .

    Isso resolve seu problema? Chamando basicamente setBackgroundDrawable em cada exibição de tabulação com um seletor?

     > TabHost mTabHost = getTabHost(); > > TabHost.TabSpec tab1 =mTabHost.newTabSpec("tab1"); > TabHost.TabSpec tab2 =mTabHost.newTabSpec("tab2"); > > tab1.setIndicator("title tab1"); > tab2.setIndicator("title tab2"); > mTabHost.addTab(tab1) ;mTabHost.addTab(tab2); > > TabHost.setCurrentTab(0 or 1); mTabHost.getTabWidget().getChildAt(0).setBackgroundResource(R.drawable.tab1selector); mTabHost.getTabWidget().getChildAt(1).setBackgroundResource(R.drawable.tab2selector); mTabHost.getTabWidget().getChildAt(2).setBackgroundResource(R.drawable.tab3selector); mTabHost.getTabWidget().getChildAt(3).setBackgroundResource(R.drawable.tab4selector); > > TabHost mTabHost = getTabHost(); > > TabHost.TabSpec tab1 =mTabHost.newTabSpec("tab1"); > TabHost.TabSpec tab2 =mTabHost.newTabSpec("tab2"); > > tab1.setIndicator("title tab1"); > tab2.setIndicator("title tab2"); > mTabHost.addTab(tab1) ;mTabHost.addTab(tab2); > > TabHost.setCurrentTab(0 or 1); mTabHost.getTabWidget().getChildAt(0).setBackgroundResource(R.drawable.tab1selector); mTabHost.getTabWidget().getChildAt(1).setBackgroundResource(R.drawable.tab2selector); mTabHost.getTabWidget().getChildAt(2).setBackgroundResource(R.drawable.tab3selector); mTabHost.getTabWidget().getChildAt(3).setBackgroundResource(R.drawable.tab4selector); > > TabHost mTabHost = getTabHost(); > > TabHost.TabSpec tab1 =mTabHost.newTabSpec("tab1"); > TabHost.TabSpec tab2 =mTabHost.newTabSpec("tab2"); > > tab1.setIndicator("title tab1"); > tab2.setIndicator("title tab2"); > mTabHost.addTab(tab1) ;mTabHost.addTab(tab2); > > TabHost.setCurrentTab(0 or 1); mTabHost.getTabWidget().getChildAt(0).setBackgroundResource(R.drawable.tab1selector); mTabHost.getTabWidget().getChildAt(1).setBackgroundResource(R.drawable.tab2selector); mTabHost.getTabWidget().getChildAt(2).setBackgroundResource(R.drawable.tab3selector); mTabHost.getTabWidget().getChildAt(3).setBackgroundResource(R.drawable.tab4selector); > > TabHost mTabHost = getTabHost(); > > TabHost.TabSpec tab1 =mTabHost.newTabSpec("tab1"); > TabHost.TabSpec tab2 =mTabHost.newTabSpec("tab2"); > > tab1.setIndicator("title tab1"); > tab2.setIndicator("title tab2"); > mTabHost.addTab(tab1) ;mTabHost.addTab(tab2); > > TabHost.setCurrentTab(0 or 1); mTabHost.getTabWidget().getChildAt(0).setBackgroundResource(R.drawable.tab1selector); mTabHost.getTabWidget().getChildAt(1).setBackgroundResource(R.drawable.tab2selector); mTabHost.getTabWidget().getChildAt(2).setBackgroundResource(R.drawable.tab3selector); mTabHost.getTabWidget().getChildAt(3).setBackgroundResource(R.drawable.tab4selector); 

    Use .setBackgroundResource e tabNselector é um XML – tabNselector.xml

      <?xml viewsion="1.0" encoding="UTF-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="false" android:drawable="@drawable/tabN"/> <item android:state_selected="true" android:drawable="@drawable/tabNsel" /> </selector> 

    Eu configurei o pairâmetro 'android: background' no elemento TabWidget do XML paira dair o background genérico de todas as guias.

    Então eu passei vistas inflado de outro XML no método '.setIndicator'.

      View v = LayoutInflater.from(this).inflate(R.layout.tab_widget, null); TextView label = (TextView) v.findViewById(R.id.tabLabel); label.setText("Whateview"); tab1 .setContent(v); 

    Eu sinto que é uma maneira mais agradável de fazer isso.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.