Ho un TabLayout (libreria di supporto alla progettazione) che è legato a un ViewPager che contiene tre schede. Ho progettato un layout personalizzato e l'ho impostato su ogni scheda in TabLayout. Ho cercato di cambiare il colore di sfondo della scheda attualmente selezionata. Il colore si avvolge solo attorno al testo nella scheda ma non occupa l'intero spazio della tabulazione.La modifica del colore di sfondo di una scheda in TabLayout (libreria di supporto di progettazione Android) non occupa l'intero spazio di tabulazione
Di seguito sono riportati i frammenti di codice della mia attività e il file di layout personalizzato.
Codice attività
public class CustomTabLayoutActivity extends AppCompatActivity {
private TabLayout tabLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_custom_tab_layout);
tabLayout = (TabLayout) findViewById(R.id.tabLayout);
ViewPager viewPager = (ViewPager) findViewById(R.id.viewPager);
setupViewPager(viewPager);
tabLayout.setupWithViewPager(viewPager);
tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);
setupTabLayout();
viewPager.setCurrentItem(0);
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
for (int i = 0; i < tabLayout.getTabCount(); i++) {
if (i == position) {
tabLayout.getTabAt(i).getCustomView().setBackgroundColor(Color.parseColor("#198C19"));
} else {
tabLayout.getTabAt(i).getCustomView().setBackgroundColor(Color.parseColor("#f4f4f4"));
}
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
private void setupViewPager(ViewPager viewPager) {
CustomViewPagerAdapter pagerAdapter = new CustomViewPagerAdapter(getSupportFragmentManager());
pagerAdapter.addFragments(new OneFragment(), "ONE");
pagerAdapter.addFragments(new OneFragment(), "TWO");
pagerAdapter.addFragments(new OneFragment(), "THREE");
viewPager.setAdapter(pagerAdapter);
}
private void setupTabLayout() {
TextView customTab1 = (TextView) LayoutInflater.from(CustomTabLayoutActivity.this)
.inflate(R.layout.custom_tab_layout, null);
TextView customTab2 = (TextView) LayoutInflater.from(CustomTabLayoutActivity.this)
.inflate(R.layout.custom_tab_layout, null);
TextView customTab3 = (TextView) LayoutInflater.from(CustomTabLayoutActivity.this)
.inflate(R.layout.custom_tab_layout, null);
customTab1.setText("ONE");
tabLayout.getTabAt(0).setCustomView(customTab1);
customTab2.setText("TWO");
tabLayout.getTabAt(1).setCustomView(customTab2);
customTab3.setText("THREE");
tabLayout.getTabAt(2).setCustomView(customTab3);
}
}
file di layout personalizzato per ogni scheda
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tab"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:background="#ffffff"
android:text="Test"
android:textColor="@android:color/black"
android:textSize="20sp" />
Ecco lo screenshot delle schede dopo l'esecuzione del codice di cui sopra.
Come voi potete vedere, il colore occupa solo il testo nella scheda, ma non l'intero spazio scheda. Come ottenere questo? Qualsiasi idea/suggerimento mi aiuterebbe molto. Grazie in anticipo.
WOW uomo !!! Ho cercato di ottenere questo risultato nelle ultime 5 ore. Mi hai salvato la giornata. Ha funzionato come un fascino. –
Puoi spiegare perché abbiamo bisogno di aggiungere poche righe di codice a styles.xml? –
Felice che abbia funzionato per te! L'aggiunta a styles.xml è solo per collegare il selettore e i drawable che impostano il colore di sfondo. –