2015-07-14 4 views
2

В середине моего макета я хочу иметь 2 вкладки, чтобы выбирать между просмотром 2 разных списков во второй половине экрана. Как я могу это сделать?Вкладки Android в середине макета

Вот изображение, иллюстрирующее то, чего я хочу достичь. На этом изображении есть вкладка вопросов и вкладка ответов в середине экрана. В зависимости от того, какая вкладка выбора она показывает другой ListView:

TabExample

Я хочу, чтобы достичь этого точно такую ​​же вещь.

Я пробовал делать это с помощью виджета TabHost, но для жизни я не мог избавиться от заголовка (я попытался выбрать темы без заголовка, попробовал установить тему в манифесте без заголовка один)

Я также попытался сделать действие бар вкладки, но они были в верхней части экрана ....

Как создать вкладки в середине моего экрана, как на картинке?

+0

Можете ли вы повторно сформулировать свой вопрос, чтобы быть более ясным в том, что вы просите? – Cookster

+0

@Cookster Просто отредактировал этот вопрос. По сути, я хочу сделать вкладки в середине экрана, но я не могу понять, как это сделать.Я бы хотел, чтобы кто-то объяснил, как это сделать. – Pseduosance

ответ

0

Вы можете попробовать с помощью ViewPager с PagerTabStrip

Вы можете добавлять фрагменты в виде вкладок страниц путем внедрения FragmentPagerAdapter

В файле XML макет, вы должны быть в состоянии передвигаться ViewPager в любом месте в вашем как и большинство других компонентов. Я не пробовал сосредоточиться на нем, но я разместил вещи выше и ниже, и он ведет себя так, как вы ожидали.

<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android" 
            android:id="@+id/pager" 
            android:layout_width="match_parent" 
            android:layout_height="match_parent" > 

    <android.support.v4.view.PagerTabStrip 
     android:id="@+id/pager_header" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 


</android.support.v4.view.ViewPager> 

пример FragmentPagerAdapter

public class FragmentPagerAdapter extends android.support.v4.app.FragmentPagerAdapter 
{ 
    final int PAGE_COUNT = 2; 

    private final String[] PAGE_TITLES = 
      { 
        "Fragment1", 
        "Fragment2" 
      }; 

    public FragmentPagerAdapter() 
    { 
     super(getSupportFragmentManager()); 
    } 

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

    @Override 
    public CharSequence getPageTitle(int position) 
    { 
     return PAGE_TITLES[position]; 
    } 

    @Override 
    public Fragment getItem(int position) 
    { 
     switch(position) 
     { 
      case 0: 
       return new Fragment1(); 
      case 1: 
       return new Fragment2(); 
      default: 
       return null; 
     } 

    } 
} 

и в главном Acivity:

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

...  
     mCustomPagerAdapter = new FragmentPagerAdapter(); 
     mViewPager = (ViewPager) findViewById(R.id.pager); 
     mViewPager.setAdapter(mCustomPagerAdapter); 

... 
    } 
+0

Я пытался скопировать код, который у вас есть, но getSupportFragmentManager() кажется неопределенным. Я искал его, и вам кажется, что вам нужно наследовать от фрагментации, но мы уже расширяем FragmentPageAdapter ... – Pseduosance

+0

Хорошая точка ... Мой проект, из которого я взял код, имеет FragmentPagerAdapter, расположенный как вложенный класс MainActivity. Попытайтесь поместить класс в актив, который вы хотите использовать. –

2

Я должен был сделать то же самое сегодня! Я пробовал с PagerTabStrip, потому что я думал, что вы не можете использовать TabLayout, если это не с Toolbar. Оказывается, я был неправ, и он даже используется в Google iosched. Таким образом, вы можете разместить TabLayout + ViewPager везде, где захотите.

Я знаю, что вы хотите сделать некоторые пользовательские вкладки, которые были бы легче настроить, если бы они были кнопками, но, на мой взгляд, лучше использовать TabLayout + ViewPager, так как он делает вещи более масштабируемыми.

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 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:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin"> 

    <LinearLayout 
     android:id="@+id/top_layout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     android:orientation="horizontal"></LinearLayout> 

    <RelativeLayout 
     android:id="@+id/bottom_layout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_below="@+id/top_layout" 
     android:layout_weight="1"> 

     <android.support.design.widget.TabLayout 
      android:id="@+id/pager_header" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:minHeight="60dp" 
      app:tabGravity="fill" 
      app:tabIndicatorColor="@color/colorAccentSecondary" 
      app:tabMode="fixed" 
      app:tabSelectedTextColor="@color/colorAccentSecondary" 
      app:tabTextAppearance="@style/TournamentWaitingTimerTabTextAppearance" /> 

     <android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android" 
      android:id="@+id/pager" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_below="@+id/pager_header"></android.support.v4.view.ViewPager> 
    </RelativeLayout> 

</LinearLayout> 

MainActivity класс:

public class MainActivity extends AppCompatActivity { 

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

     // Locate the viewpager in activity_main.xml 
     ViewPager viewPager = (ViewPager) findViewById(R.id.pager); 

     // Set the ViewPagerAdapter into ViewPager 
     ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
     adapter.addFrag(new LeftFragment(), "Players"); 
     adapter.addFrag(new RightFragment(), "Prizes"); 

     viewPager.setAdapter(adapter); 

     TabLayout mTabLayout = (TabLayout) findViewById(R.id.pager_header); 
     mTabLayout.setupWithViewPager(viewPager); 
    } 

    class ViewPagerAdapter extends FragmentStatePagerAdapter { 
     private final List<Fragment> mFragmentList = new ArrayList<>(); 
     private final List<String> mFragmentTitleList = new ArrayList<>(); 

     public ViewPagerAdapter(FragmentManager manager) { 
      super(manager); 
     } 

     @Override 
     public Fragment getItem(int position) { 
      return mFragmentList.get(position); 
     } 

     @Override 
     public int getCount() { 
      return mFragmentList.size(); 
     } 

     public void addFrag(Fragment fragment, String title) { 
      mFragmentList.add(fragment); 
      mFragmentTitleList.add(title); 
     } 

     @Override 
     public CharSequence getPageTitle(int position) { 
      return mFragmentTitleList.get(position); 
     } 
    } 
} 

Вы можете изменить адаптер, который вы используете, это не имеет значения.

Чтобы настроить вкладки, я бы взглянул на this amazing tutorial.

+0

Спасибо за ответ, в моей активности он показывает панель вкладок, но не содержит фрагмент содержимого, можете ли вы догадаться, в чем проблема? –

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