Android Tabs in middle of layout

后端 未结 2 1746
无人共我
无人共我 2021-01-14 03:39

In the middle of my layout I want to have 2 tabs to choose between viewing 2 different lists in the second half of the screen. How can I do this?

Here is an image il

相关标签:
2条回答
  • 2021-01-14 04:06

    I had to do the same today! I tried with PagerTabStrip, because I thought you can't use TabLayout if it's not with a Toolbar. Turns out I was wrong, and it's even used in Google iosched. So you can put a TabLayout + ViewPager wherever you want.

    I know you want to do some very custom tabs, which would be easier to customize if they were buttons, but in my opinion it's better to use TabLayout + ViewPager, since it makes things more scalable.

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

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

    You can change the adapter you use, it doesn't matter.

    To customize tabs, I'd take a look at this amazing tutorial.

    0 讨论(0)
  • 2021-01-14 04:13

    You can try using a ViewPager with PagerTabStrip

    You can add fragments as page tabs by implementing a FragmentPagerAdapter

    In your layout xml file, you should be able to move around the ViewPager to anywhere in your layout like you would most other components. I haven't tried centering it, but I have placed things above and below it, and it behaves as you would expect.

    <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 example

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

    and in your main 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 讨论(0)
提交回复
热议问题