2016-01-27 5 views
5

Używam TabLayout do nawigacji pomiędzy fragmentami w mojej aplikacji. Chciałbym, aby tabulacje były wyrównane po prawej stronie paska narzędzi (obok ikony ustawień). I to jest wyświetlany w ten sposób po raz pierwszy otworzyć aplikację:Android TabLayout nie wyrówna do prawej po wznowieniu działania

Desired Layout

Jednak, kiedy obrócić ekran do góry, a następnie z powrotem do portretu, występy stają się w środku Toolbar:

Undesired Layout

Oto kod na pasku narzędzi w activity_main.xml:

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

     <RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 

      <ImageView 
       android:layout_height="wrap_content" 
       android:layout_width="wrap_content" 
       android:paddingTop="16dp" 
       android:paddingBottom="16dp" 
       android:layout_gravity="center_vertical" 
       android:src="@drawable/ic_photo_camera_white_24dp"/> 

      <TextView 
       android:id="@+id/title_text" 
       android:layout_width="wrap_content" 
       android:layout_height="match_parent" 
       android:gravity="center" 
       android:layout_alignParentLeft="true" 
       android:layout_alignParentStart="true" 
       android:paddingLeft="56dp" 
       android:paddingStart="56dp" 
       android:textColor="@color/white" 
       android:textSize="@dimen/abc_text_size_title_material_toolbar"/> 

      <android.support.design.widget.TabLayout 
       android:id="@+id/tabs" 
       android:layout_width="wrap_content" 
       android:layout_height="match_parent" 
       android:gravity="right" 
       app:tabMode="fixed" 
       app:tabMaxWidth="56dp" 
       android:layout_alignParentRight="true" 
       android:layout_alignParentEnd="true" 
       app:tabIndicatorColor="@android:color/white"/> 
     </RelativeLayout> 
    </android.support.v7.widget.Toolbar> 

A metoda onCreate MainActivity.java

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

    viewPager = (ViewPager) findViewById(R.id.viewpager); 
    setupViewPager(viewPager); 

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

    tabLayout = (TabLayout) findViewById(R.id.tabs); 
    tabLayout.setupWithViewPager(viewPager); 
    setupTabIcons(); 

    TextView tv = (TextView) findViewById(R.id.title_text); 
    tv.setText(viewPager.getAdapter().getPageTitle(viewPager.getCurrentItem())); 

    tabLayout.setOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(viewPager) { 
     @Override 
     public void onTabSelected(TabLayout.Tab tab) { 

      super.onTabSelected(tab); 
      TextView tv = (TextView) findViewById(R.id.title_text); 
      tv.setText(tabText[tab.getPosition()]); 

     } 
    }); 
} 

setupViewPager metoda:

private void setupViewPager(ViewPager viewPager) { 
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 

    adapter.addFragment(new HotFragment(), "Hot"); 
    adapter.addFragment(new YourPostsFragment(), "Your Posts"); 
    adapter.addFragment(new ExploreMapFragment(), "Explore"); 
    viewPager.setAdapter(adapter); 
} 

setupTabIcons metoda:

private void setupTabIcons() { 
    TabLayout.Tab hot = tabLayout.getTabAt(0); 
    TabLayout.Tab your_posts = tabLayout.getTabAt(1); 
    TabLayout.Tab explore = tabLayout.getTabAt(2); 
    hot.setIcon(tabIcons[0]); 
    hot.setText(null); 
    your_posts.setIcon(tabIcons[1]); 
    your_posts.setText(null); 
    explore.setIcon(tabIcons[2]); 
    explore.setText(null); 
} 

Próbowałem wielu różnych właściwości XML, ale jestem skłonny sądzić, że jest to związane z Java, ze względu na problem występujący, gdy aktywność jest ponownie uruchamiana. Ale nie mogę się domyślić, dlaczego tak się stanie. Każda pomoc jest doceniana.

+0

Cześć, jestem tylko ciekaw, w 'android.support .design.widget.TabLayout', użyłeś 'android: gravity =" right "', czy to nie ma być 'android: layout_gravity =" right "? – Sam

Odpowiedz

0

To, co zrobiłem, gdy miałem problemu:

  1. rozpoczęła nowy projekt (wybierz aktywność kartami) z Android Studio (inspirowany ich kodu).
  2. to część mojego xml

      <android.support.design.widget.AppBarLayout 
          ...> 
    
    <android.support.v7.widget.Toolbar 
        ...   > 
    
        <android.support.design.widget.TabLayout 
         android:id="@+id/tabs" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         app:tabMode="fixed" 
         android:layout_gravity="right" 
         android:layout_marginRight="24dp" 
         style="@style/AppTabLayout"/> 
    
    </android.support.v7.widget.Toolbar> 
    

And this is what i got: marży edit prawo jak chcesz