2017-03-14 1 views
1

Hallo, ich habe ein tabLayout wo versucht durch dieses Verfahren für jedes Scrollen Custom von Tabs zu aktualisierenTab.setCustomView() das Hinzufügen neuer Ansichten anstatt sie zu ersetzen

private void updateTabs() { 
     for (int i = 0; i < 3; i++) { 
      TabLayout.Tab tab = tabLayout.getTabAt(i); 
      ImageView image = new ImageView(this); 
      image.setImageResource(
        tab.isSelected() ? whiteTabIcons[i] : darkTabIcons[i] 
      ); 
      tab.setCustomView(image); 
     } 
    } 

Aber ich habe, wenn enter image description here

Scrollen Diese

korrekt funktioniert, wenn ich SetIcon statt setCustomView verwenden, aber Symbole sind zu klein, so versuche ich setCustomView

Aktivität

zu verwenden
public class MainActivity extends AppCompatActivity { 

private Toolbar mToolbar; 
private TabLayout tabLayout; 

private int[] darkTabIcons = { 
     R.drawable.ic_tab_list_dark, 
     R.drawable.ic_tab_balance_dark, 
     R.drawable.ic_tab_add_dark }; 

private int[] whiteTabIcons = { 
     R.drawable.ic_tab_list_white, 
     R.drawable.ic_tab_balance_white, 
     R.drawable.ic_tab_add_white }; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    mToolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(mToolbar); 

    SectionsPagerAdapter mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); 
    final AppBarLayout appBar = (AppBarLayout) findViewById(R.id.appbar); 

    ViewPager viewPager = (ViewPager) findViewById(R.id.container); 
    tabLayout = (TabLayout) findViewById(R.id.tab_layout); 


    viewPager.setAdapter(mSectionsPagerAdapter); 
    tabLayout.setupWithViewPager(viewPager); 
    viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
     @Override 
     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

     } 

     @Override 
     public void onPageSelected(int position) { 
      appBar.setExpanded(true, true); 
      updateTabs(); 
     } 

     @Override 
     public void onPageScrollStateChanged(int state) { 
     } 
    }); 
} 

public class SectionsPagerAdapter extends FragmentPagerAdapter { 

    public SectionsPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     Fragment fragment = null; 
     switch (position) { 
      case 0 : 
       fragment = MoneyTransferListFragment.newInstance(); 
       break; 
      case 1 : 
       fragment = MainFragment.newInstance(); 
       break; 
      case 2 : 
       fragment = MoneyTransferFragment.newInstance(); 
       break; 
     } 
     return fragment; 
    } 

    @Override 
    public int getCount() { 
     return 3; 
    } 
} 

private void updateTabs() { 
    for (int i = 0; i < 3; i++) { 
     TabLayout.Tab tab = tabLayout.getTabAt(i); 
     ImageView image = new ImageView(this); 
     image.setImageResource(
       tab.isSelected() ? whiteTabIcons[i] : darkTabIcons[i] 
     ); 
     tab.setCustomView(image); 
    } 
} 

XML

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/main_content" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    tools:context="com.lol.mycash.activities.MainActivity"> 

    <android.support.design.widget.AppBarLayout 
     android:id="@+id/appbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:theme="@style/AppTheme.AppBarOverlay"> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:background="?attr/colorPrimary" 
      app:layout_scrollFlags="scroll|enterAlways" 
      app:popupTheme="@style/AppTheme.PopupOverlay"> 
     </android.support.v7.widget.Toolbar> 

     <android.support.design.widget.TabLayout 
      android:id="@+id/tab_layout" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      app:tabIndicatorColor="@android:color/white" 
      app:tabIndicatorHeight="2.5dp"/> 

    </android.support.design.widget.AppBarLayout> 

    <android.support.v4.view.ViewPager 
     android:id="@+id/container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 

</android.support.design.widget.CoordinatorLayout> 

UPD:

Die Entscheidung ist: 1) Ich habe Wähler für jedes Symbol wie dieses

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/ic_tab_list_white" android:state_selected="true" /> 
    <item android:drawable="@drawable/ic_tab_list_dark" /> 
</selector> 

2) Aus Array mit Selektoren:

private int[] tabSelectors = { 
      R.drawable.ic_tab_list_selector, 
      R.drawable.ic_tab_balance_selector, 
      R.drawable.ic_tab_add_selector 
    }; 

3) neu geschrieben Methode für init Tabs und es nur einmal

private void initTabs() { 
     for (int i = 0; i < 3; i++) { 
      TabLayout.Tab tab = tabLayout.getTabAt(i); 
      ImageView image = new ImageView(this); 
      image.setImageResource(tabSelectors[i]); 
      tab.setCustomView(image); 
     } 
    } 

Antwort

0

Versuchen Anruf updateTabs nach

tabLayout = (TabLayout) findViewById(R.id.tab_layout) 

verwenden, da Sie Symbol vor der Verwendung Swipe zwischen den Tabs init muss.

Und verwenden nächsten Code für Set Icon

private void updateTabs() { 
    for (int i = 0; i < 3; i++) { 
     TabLayout.Tab tab = tabLayout.getTabAt(i); 
     tab.setIcon(
       tab.isSelected() ? whiteTabIcons[i] : darkTabIcons[i]) 
    } 
} 

Aber für effektivere Benutzer das nächste Mal (einmal für init nennen)

private void updateTabs() { 
    for (int i = 0; i < 3; i++) { 
     TabLayout.Tab tab = tabLayout.getTabAt(i); 
     tab.setIcon(selectorTabIcons[i]); 
    } 
} 

nächsten Selektoren erstellen: ic_tab_list_selector, ic_tab_balance_selector, ic_tab_add_selector in der Zeichnungsordner mit folgendem Inhalt:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:drawable="@drawable/ic_tab_list_light" android:state_selected="true" /> 
<item android:drawable="@drawable/ic_tab_list_dark" /> 

Für andere Symbol erstellen Sie auch Selektoren. und init Array:

private int[] selectorTabIcons = { 
    R.drawable.ic_tab_list_selector, 
    R.drawable.ic_tab_balance_selector, 
    R.drawable.ic_tab_add_selector }; 
+0

Ja, ich weiß, aber Problem –

+0

@VanyaMakhlinets nicht hier ist Was ist das? –

+0

Thx für Beratung mit Selektoren, sieht es richtig aus, aber ich sagte, dass, wenn ich SetIcon, alles funktioniert ok, der einzige Grund, dass ich SetCustomView statt SetIcon ist, weil die Symbole zu klein sind, so muss ich SetCustomView oder finden Der Weg, um Symbole größer –

1

Sie onPageSelected() verwenden sollen:

tabLayout.getTabAt(position).setIcon(R.drawable.my_selected_icon); 

Wenn das Symbol ist zu klein, das ist, weil Sie Ihr Feld wrap_content sowohl in Ihrer Breite und Höhe des Bildes festgelegt und die Bildgrößen stimmen nicht überein

0

Weil Sie neue ImageView verwenden und das auf Ihre Tabs setzen.

ImageView image = new ImageView(this); 
     image.setImageResource(
       tab.isSelected() ? whiteTabIcons[i] : darkTabIcons[i] 
     ); 

Verwenden Sie die view.findViewById("Id of your image") ursprüngliches Image zu erhalten und die neue Ressource auf diese Stelle eine neue Image schaffen(), wo die Sicht nach Ansicht des Registerkarte ist.

Versuchen Sie folgendes:

private void updateTabs() { 
    for (int i = 0; i < 3; i++) { 
     TabLayout.Tab tab = tabLayout.getTabAt(i); 
     ImageView image = (ImageView) tab.getCustomView().findViewById(R.id.icon); // Use the id from your custom tab layout 
     image.setImageResource(
       tab.isSelected() ? whiteTabIcons[i] : darkTabIcons[i] 
     ); 
     tab.setCustomView(image); 
    } 

}

Verwandte Themen