2016-01-27 5 views
5

Ich verwende ein TabLayout, um zwischen Fragmenten in meiner Anwendung zu navigieren. Ich möchte, dass die Tabs rechts neben der Toolbar ausgerichtet sind (neben dem Einstellungssymbol). Und es ist wie diese angezeigt werden, wenn ich zum ersten Mal die App öffnen:Android TabLayout wird nicht richtig ausgerichtet, sobald die Aktivität wieder aufgenommen wird

Desired Layout

Allerdings, wenn ich drehen Sie den Bildschirm ins Querformat und dann zurück zum Portrait, die in der Werkzeugleiste zentriert werden Registerkarten:

Undesired Layout Hier

ist der Code für die Toolbar, in 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> 

Und die onCreate Methode der 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 Methode:

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 Methode:

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); 
} 

Ich habe viele verschiedene XML-Eigenschaften ausprobiert, aber ich bin geneigt zu glauben, dass dies Java-bedingt ist, aufgrund des Problems, das auftritt, wenn die Aktivität neu gestartet wird. Aber ich kann nicht finden, warum das passieren würde. Jede Hilfe wird geschätzt.

+0

Hallo wünschen, ich bin nur neugierig, in 'android.support .design.widget.TabLayout', du benutzt 'android: gravity =" right "', ist das nicht so, dass es android heißt: layout_gravity = "right" '? – Sam

Antwort

0

Das ist, was ich tat, als ich Ihr Problem hatte:

  1. gestartet neues Projekt (wählen Tabbed-Aktivität) mit Android Studio (inspiriert von ihrem Code).
  2. dies ist ein Teil meiner 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: bearbeiten Rand rechts, wie Sie

Verwandte Themen