English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Método de configuração de intervalo de tab no TabLayout (explicação de exemplo)

Usar TabLayout com ViewPager oferece muitas conveniências, mas TabLayout ainda tem muitos pontos criticados por pessoas.

Aqui falamos apenas sobre como ajustar o espaço entre os tabs, encontrei uma série de métodos na internet, nada funciona com padding e margin, não há outra opção, se você quiser usar TabLayout, você mesmo precisa encontrar uma solução. O efeito é o seguinte:

Método de implementação, já que isso não é fácil de configurar, vamos fazer algo no fundo do cenário, o código de layout é o seguinte:

<android.support.design.widget.TabLayout
  xmlns:app="http://schemas.android.com/apk/res-auto"
  android:id="@"+id/tl_download_tabs"
  android:layout_width="wrap_content"
  android:layout_height=""30dp"
  android:layout_marginTop=""10dp"
  android:layout_gravity="center_horizontal"
  android:overScrollMode="never"
  app:tabMode="fixed"
  app:tabPaddingStart=""30dp"
  app:tabPaddingEnd=""30dp"
  app:tabIndicatorHeight="0dp"
  app:tabBackground="@drawable"/download_tab_bg_selector"
  app:tabSelectedTextColor="#000000"
  app:tabTextColor="#ffffff"/>

Dois, o ponto crucial está no selector de fundo, o código é o seguinte:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
 <item android:state_selected="true">
  <!--<shape>
   <solid android:color="#ffffff"/>
   <corners android:topLeftRadius="10dp" android:topRightRadius="10dp" />
  </shape>-->
  <!--Para que os tabs internos do TabLayout tenham intervalo, não consegui encontrar outra maneira de configurar, só posso configurar o intervalo no gráfico de fundo-->
  <layer-list>
   <item>
    <shape>
     <solid android:color="@android:color/transparent"/>
    </shape>
   </item>
   <item android:left="5dp" android:right="5dp">
    <shape>
     <corners android:topLeftRadius="10dp" android:topRightRadius="10dp" />
     <solid android:color="#ffffff"/>
    </shape>
   </item>
  </layer-list>
 </item>
 <item android:state_selected="false">
  <!--<shape>
   <solid android:color="#bcbcbc"/>
   <corners android:topLeftRadius="10dp" android:topRightRadius="10dp" />
  </shape>-->
  <layer-list>
   <item>
    <shape>
     <solid android:color="@android:color/transparent"/>
    </shape>
   </item>
   <item android:left="5dp" android:right="5dp">
    <shape>
     <corners android:topLeftRadius="10dp" android:topRightRadius="10dp" />
     <solid android:color="#bcbcbc"/>
    </shape>
   </item>
  </layer-list>
 </item>
</selector>

Os locais comentados são os selectores originais sem intervalo, aqui foi configurado um padding à esquerda e à direita do fundo, o efeito é excelente.

Desvantagem: Se o intervalo for muito grande, essa maneira tem um pouco de defeito, é que ao clicar em um espaço em branco, também pode selecionar o tab.

No entanto, para intervalos não muito grandes, basicamente não se nota.

Três, o uso da Activity é muito simples:

TabLayout mTabLayout = (TabLayout) findViewById(R.id.tl_download_tabs);
  mTabLayout.addTab(mTabLayout.newTab().setText("Baixado"));
  mTabLayout.addTab(mTabLayout.newTab().setText("Baixando"));
  mTabLayout.setupWithViewPager(mViewPager);

Quarto: originalmente, estava em um layout linear, com TabLayout e ViewPager, tentei envolver um RelativeLayout adicional no TabLayout, mas descobri que o texto do Tab não foi exibido, além disso, como mencionado na Internet, trocar a ordem de addTab e setupWithViewPager também é um buraco, pode ser visto, mas apareceu uma situação ainda mais absurda, duas páginas em branco no início, e duas normais no final, de qualquer maneira, é muito estranho.

No entanto, ainda é necessário lidar com isso no Adapter, simplesmente reescrever o seguinte método é suficiente, na verdade, isso pode ser mais razoável, pelo menos pode garantir que o número de Tabs e o número de páginas do ViewPager sejam consistentes.

@Override
  public CharSequence getPageTitle(int position) {
   if(position == 0){
    return "Baixado";
   } 1{
    return "Baixando";
   }
   return "";
  }

Este artigo sobre o método de configuração do intervalo de TabLayout no TabLayout (explicação de exemplo) é tudo que o editor compartilha com você, esperando que possa fornecer uma referência para você, e esperando que todos vocês possam apoiar e gritar guia.

Declaração: O conteúdo deste artigo é extraído da Internet, pertence ao respectivo proprietário, o conteúdo é contribuído e carregado voluntariamente pelos usuários da Internet, este site não possui direitos de propriedade, não foi editado manualmente e não assume responsabilidade por eventuais responsabilidades legais. Se você encontrar conteúdo suspeito de violação de direitos autorais, por favor, envie um e-mail para: notice#w3Aviso: Este conteúdo é extraído da Internet, pertence ao respectivo proprietário, o conteúdo é contribuído e carregado voluntariamente pelos usuários da Internet, este site não possui direitos de propriedade, não foi editado manualmente e não assume responsabilidade por eventuais responsabilidades legais. Se você encontrar conteúdo suspeito de violação de direitos autorais, por favor, envie um e-mail para: notice#w

Você também pode gostar