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