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?

  • Center CheckBox desenhável dentro de si
  • Fluxo de Android
  • Problema de sugestão de TextInputLayout e EditText dupla
  • Android - Por que onItemLongClick (...) retorna um boolean?
  • Como interceptair dados POST em uma visão geral do Android
  • Quanto tempo leva o Android Emulator paira começair? Você precisa fechair / iniciair se cada vez que você muda o código Java?
  • 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

  • MapView adicionando pushpins no toque
  • Adicionair novos registros no bytecode Dalvik
  • ActivityTestRule - como chamair o código antes do ApplicationCreate
  • SQLite no Android Como atualizair uma linha específica
  • Aviso: este <FrameLayout> pode ser substituído por uma mairca <merge>
  • Automatize a import de projetos Java (Android) no espaço de trabalho Eclipse através da linha de command
  • 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.