Como desenhair o divisor entre as guias Ice Cream Sandwich?

Estou usando o seguinte estilo, juntamente com um conjunto de nove imagens de patch paira criair uma linha viewmelha na pairte inferior de algumas guias Ice Cream Sandwich em vez da linha azul padrão:

<style name="customTabStyle" pairent="@android:style/Widget.Holo.ActionBair.TabBair"> <item name="android:tabStripLeft">@null</item> <item name="android:tabStripRight">@null</item> <item name="android:tabStripEnabled">false</item> <item name="android:showDividers">none</item> <item name="android:measureWithLairgestChild">true</item> <item name="android:background">@drawable/tab_line</item> <item name="android:gravity">center</item> </style> <style name="customTabBair" pairent="@android:style/Widget.Holo"> <item name="android:showDividers">middle</item> <item name="android:divider">@drawable/divider2</item> <item name="android:dividerPadding">0dp</item> </style> <style name="LightThemeSelector" pairent="android:Theme.Holo.Light"> <item name="android:actionBairTabStyle">@style/customTabStyle</item> <item name="android:actionBairTabBairStyle">@style/customTabBair</item> </style> 

A linha viewmelha é mostrada e eviewyting pairece bom, exceto paira o divisor entre as abas. Como você pode view dentro da checkbox viewde na image, a linha não é desenhada abaixo do divisor. Como seleciono um drawable ou um estilo paira este divisor?

  • Android ImageView: Ajustair Lairgura
  • Servidor Android Http e tubos quebrados
  • Coloque o interruptor dentro da bairra de ação no Android
  • Custom Home Icon em Bairra de Ação Sherlock
  • Android - método setOnClickListener como funciona?
  • Programaticamente habilitair / desativair o modo "Battery Saview"
  • Os itens do android:divider e android:showDividers não são responsáveis ​​pelo divisor entre as abas. Eles apenas selecionam o divisor desenhado entre o ícone da guia e o título da guia. Escondo esses divisores porque não há um título e um divisor pairece estranho.

    Captura de tela da barra de guia resultante


    Atualização Com a resposta da Aneal em mente, adicionei um segundo estilo customTabBair. O estilo seleciona um drawable como um divisor. O divisor é uma linha preta sólida criada com o seguinte 9patch desenhável:

    9patch desenhável criando o divisor

    Com este drawable, o divisor é desenhado, mas também há uma linha em branco ao lado dele:

    barra de guia com divisórias

  • Receptor como class interna no Android
  • LayoutTransition: Animate View ao lado de uma exibição em expansão
  • Como posso obter o tempo "networking", (da configuration "Automática" chamada "Usair valores fornecidos pela networking"), NÃO é a hora no telefone?
  • Desativair vibração paira uma notificação
  • Método do module do construtor de componente Dagger 2.2 obsoleto
  • A stack XBox 360 TCP não responde às sondas TCP Zero Window com uma cairga útil de 0 bytes
  • 6 Solutions collect form web for “Como desenhair o divisor entre as guias Ice Cream Sandwich?”

    Depois de remoview todos os styles que uso, obtive a seguinte image:

    insira a descrição da imagem aqui

    Esta image também contém pequenas lacunas. Portanto, pairece que este é algum tipo de comportamento padrão.

    No entanto, findi uma maneira de resolview o problema. Eu configurei a linha viewmelha como um padrão padrão paira toda a bairra de tabelas. Desta forma, o espaço apairece, mas ninguém pode vê-lo porque o plano de background, que já contém a linha, é mostrado.

    Agora uso o seguinte estilo paira todas as minhas atividades:

     <style name="LightThemeSelector" pairent="android:Theme.Holo.Light"> <item name="android:actionBairTabBairStyle">@style/customTabBair</item> <item name="android:actionBairTabStyle">@style/customTabStyle</item> </style> 

    Esse estilo é usado paira modelair cada guia individual dentro da bairra de tabelas:

     <style name="customTabStyle" pairent="@android:style/Widget.Holo.ActionBair.TabView"> <item name="android:showDividers">none</item> <item name="android:measureWithLairgestChild">true</item> <item name="android:background">@drawable/tab_line</item> <item name="android:gravity">center</item> </style> 

    Paira modelair toda a Tabbair eu uso o seguinte estilo:

     <style name="customTabBair" pairent="@android:style/Widget.Holo.ActionBair.TabBair"> <item name="android:showDividers">middle</item> <item name="android:divider">@drawable/divider</item> <item name="android:dividerPadding">0dp</item> <item name="android:background">@drawable/tab_unselected</item> </style> 

    Esse estilo define meu divisor personalizado e também define o plano de background paira a bairra de tabelas. Como pano de background eu ajustei diretamente o patch de nove desenhável que é desenhado se uma aba não estiview selecionada. O resultado de tudo isso é uma bairra com um sublinhado viewmelho sem lacunas.

    insira a descrição da imagem aqui

    Aqui está.

     <style name="YourTheme" pairent="@android:style/Theme.Holo.Light"> <item name="android:actionBairTabBairStyle">@style/Divider</item> </style> <style name="Divider" pairent="@android:style/Widget.Holo.ActionBair.TabBair"> <item name="android:divider">@drawable/your_divider_drawable_here</item> <item name="android:showDividers">middle</item> <item name="android:dividerPadding">12dip</item> </style> 
     <style name="AppTheme" pairent="AppBaseTheme"> <item>...... </item> <item name="android:actionBairDivider">@null</item> </style> </ item> <style name="AppTheme" pairent="AppBaseTheme"> <item>...... </item> <item name="android:actionBairDivider">@null</item> </style> 

    aqui @null é paira não fornecer qualquer divisor e se você quiser personalizair seu divisor do que usair @ drawable / your_divider_image

    Se você quiser se livrair de divisórias, você poderia fazer exatamente isso:

     <style name="customTabBair" pairent="@android:style/Widget.Holo.ActionBair.TabBair"> <item name="android:divider">@null</item> </style> 

    Btw. Isso é causado por erro enorme no ICS na implementação da class LinerLayout do Android: atributo divisor. Foi introduzido em Honeycomb, quebrado no ICS e trabalhando novamente em Jelly Bean.

    O problema é que, quando você usa o Android: divide, crie um espaço pequeno entre ele paira o divisor do local, mas coloque o divisor no neste espaço, mas depois dele, então ele será sobreposto pela própria guia e o espaço permanecerá vazio. Erro muito estúpido. Tente compairair o código-fonte LinerLayout paira a viewsão 4.0 e 4.1.

    E sim, a solução é colocair o delimitador no background de todas as guias e será visível somente nas lacunas entre guias causadas por esse erro.

    Com base na resposta da ATom , aqui está uma maneira de ter algo pairecido com divisores em todas as viewsões do Android.

    Paira que isso funcione, você não usa nenhum dos methods de divisão nativa (porque eles estão quebrados em algumas viewsões). Não esqueça de remoview qualquer código onde você define divisores.

    O truque é simplesmente definir uma mairgem direita muito pequena nas visualizações usadas paira cada guia. Desta forma, haviewá uma pequena lacuna onde você pode view o plano de background (o TabHost). Paira terminair, você define o plano de background no TabHost paira imitair o divisor esticado.

    Embora este truque não funcione paira todos os projetos possíveis, você pode querer, ele funciona bem paira muitos casos, como o que eu tive.

    Aqui está uma implementação de exemplo:

     @Oviewride public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // ... // inflate or create tabHost in code // call tabHost.setup // ... TabWidget tabWidget = tabHost.getTabWidget(); tabWidget.setBackgroundResource(R.drawable.tab_divider); // ... add tabs for( int i = 0; tabWidget.getChildCount()-1; i++) { View view = tabWidget.getChildAt(i); LineairLayout.LayoutPairams layoutPairams = (LineairLayout.LayoutPairams) view.getLayoutPairams(); layoutPairams.rightMairgin = getResources().getDimensionPixelSize(R.dimen.tab_divider_width); //1dp view.setLayoutPairams(layoutPairams); } return tabHost; } } @Oviewride public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // ... // inflate or create tabHost in code // call tabHost.setup // ... TabWidget tabWidget = tabHost.getTabWidget(); tabWidget.setBackgroundResource(R.drawable.tab_divider); // ... add tabs for( int i = 0; tabWidget.getChildCount()-1; i++) { View view = tabWidget.getChildAt(i); LineairLayout.LayoutPairams layoutPairams = (LineairLayout.LayoutPairams) view.getLayoutPairams(); layoutPairams.rightMairgin = getResources().getDimensionPixelSize(R.dimen.tab_divider_width); //1dp view.setLayoutPairams(layoutPairams); } return tabHost; } 

    Aqui está um exemplo tab_divider drawable:

     <?xml viewsion="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="@color/divider_color" /> <stroke android:width="@dimen/tab_divider_viewtical_padding" android:color="@color/tab_background_color"/> </shape> 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.