2016-10-03 3 views
0

Я создал вкладки с ViewPager. Но заголовки вкладок появляются в центре экрана. Я бы хотел сохранить заголовки в верхней части экрана. Проверьте мои следующие xml-коды и java-файлы. Пожалуйста, дайте мне знать, как решить эту проблему.Не удалось установить заголовки вкладок в начало

Это файл XML для MainActivity:

<?xml version="1.0" encoding="utf-8"?> 
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:id="@+id/activity_main" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
    tools:context="com.example.bright.myapplication.MainActivity"> 

     <android.support.design.widget.TabLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 

      android:layout_centerHorizontal="true" 
      android:id="@+id/tablayout" 
      android:layout_below="@+id/toolbar"> 

      <android.support.design.widget.TabItem 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="Left" /> 

      <android.support.design.widget.TabItem 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="Center" /> 

      <android.support.design.widget.TabItem 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="Right" /> 

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

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:background="?attr/colorPrimary" 
      android:minHeight="?attr/actionBarSize" 
      android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 

      /> 

     <android.support.v4.view.ViewPager 
      android:id="@+id/viewpager" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_alignParentStart="true" 
      android:layout_below="@+id/toolbar" /> 
    </RelativeLayout> 

Ниже приведен файл XML для первого фрагмента:

fragment_blank_fragment1.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     tools:context="com.example.bright.myapplication.BlankFragment1"> 

     <!-- TODO: Update blank fragment layout --> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="hello_blank_fragment 1" /> 

    </FrameLayout> 

Ниже приводится xml-файл для второго фрагмента:

fragment_blank_fragment2.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     tools:context="com.example.bright.myapplication.BlankFragment2"> 

     <!-- TODO: Update blank fragment layout --> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="hello_blank_fragment 2" /> 

    </FrameLayout> 

and one more xml file for a fragment 

Ниже приводится Activity файл:

MainActivity.java

public class MainActivity extends AppCompatActivity { 

    TabLayout tabLayout; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     tabLayout = (TabLayout)findViewById(R.id.tablayout); 
     tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); 
     MyAdapter myAdapter = new MyAdapter(getSupportFragmentManager(),3); 
     ViewPager viewPager = (ViewPager)findViewById(R.id.viewpager); 
     viewPager.setAdapter(myAdapter); 
     viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); 
    } 
} 

Следующая это место, где я возвращаю фрагменты к основная деятельность до ViewPager:

MyAdapter.java

public class MyAdapter extends FragmentStatePagerAdapter { 
    int tabcount; 
    public MyAdapter(FragmentManager fm, int count) { 
     super(fm); 
     tabcount = count; 
    } 

    @Override 
    public Fragment getItem(int position) { 
     switch (position){ 
      case 0: 
       BlankFragment1 fragment1 = new BlankFragment1(); 
       return fragment1; 
      case 1: 
       BlankFragment2 fragment2 = new BlankFragment2(); 
       return fragment2; 
      case 2: 
       BlankFragment3 fragment3 = new BlankFragment3(); 
       return fragment3; 
      default: 
       return null; 
     } 

    } 

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

ответ

0

Причина вашей TabLayout появляется в центре экрана, потому что у вас есть layout_height набор для match_parent. По умолчанию gravity предметов в пределах TabLayout составляет center_vertical.

Я предполагаю, что вы хотите, стандартный вид вкладок согласно Material Design Guidelines, в этом случае файл макета для MainActivity должен выглядеть следующим образом:

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" android:layout_height="wrap_content"> 

    <android.support.design.widget.AppBarLayout android:id="@+id/app_bar" 
     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:popupTheme="@style/AppTheme.PopupOverlay/> 

     <android.support.design.widget.TabLayout android:id="@+id/tab_layout" 
      android:layout_width="match_parent" android:layout_height="wrap_content" 
      app:tabIndicatorColor="?attr/colorAccent"> 

      <android.support.design.widget.TabItem 
       android:layout_width="wrap_content" android:layout_height="wrap_content" 
       android:text="@string/tab_left"/> 

      <android.support.design.widget.TabItem 
       android:layout_width="wrap_content" android:layout_height="wrap_content" 
       android:text="@string/tab_center"/> 

      <android.support.design.widget.TabItem 
       android:layout_width="wrap_content" android:layout_height="wrap_content" 
       android:text="@string/tab_right"/> 

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

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

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

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

Кроме того, есть удобный метод для создания вкладок с ViewPager, вместо вызова viewPager.setOnPageChangeListener():

tabLayout.setupWithViewPager(viewPager); 
+0

я просто изменил на андроид: layout_height = "wrap_content" в TabLayout. Спасибо –

Смежные вопросы