情境
在 如何使用 ViewPager + TabLayout 當中
示範了怎麼操作 ViewPager 加上 TabLayout
我們可以再加上一個 Toolbar 可以讓我們的範例看起來更完整
效果如下
相關參考
關於 TabLayout 的操作可以參考
程式碼下載
你可以到 GitHub 上面觀看或下載完整的程式碼
程式碼說明
如果要加入一個 Toolbar
只需要在 activity_main.xml 內加入 android.support.v7.widget.Toolbar
元件的宣告
指定好對應的位置
如下方 xml 所示
接著搭配 ViewPager 以及 TabLayout 就可以完成我們所需要的佈局了
<?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="match_parent"
tools:context=".MainActivity">
<android.support.v7.widget.Toolbar
android:layout_alignParentTop="true"
android:id="@+id/toolbar"
android:background="#fff000"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:minHeight="?attr/actionBarSize"/>
<android.support.design.widget.TabLayout
android:layout_below="@id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/tabs"/>
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_below="@id/tabs"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
接著在 MainActvitiy.java 中把我們所需的元件引用進來
public class MainActivity extends AppCompatActivity {
private ViewPager mViewPager;
private TabLayout mTabLayout;
private Toolbar mToolbar;
private List<PageView> pageList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initData();
initView();
}
private void initData() {
pageList = new ArrayList<>();
pageList.add(new PageOne(MainActivity.this));
pageList.add(new PageTwo(MainActivity.this));
pageList.add(new PageThree(MainActivity.this));
}
private void initView() {
mToolbar = (Toolbar) findViewById(R.id.toolbar);
mViewPager = (ViewPager) findViewById(R.id.pager);
mTabLayout = (TabLayout) findViewById(R.id.tabs);
setSupportActionBar(mToolbar);
mTabLayout.addTab(mTabLayout.newTab().setText("Page one"));
mTabLayout.addTab(mTabLayout.newTab().setText("Page two"));
mTabLayout.addTab(mTabLayout.newTab().setText("Page three"));
mViewPager.setAdapter(new SamplePagerAdapter());
initListener();
}
private void initListener() {
mTabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
mViewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
mViewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(mTabLayout));
}
private class SamplePagerAdapter extends PagerAdapter {
@Override
public int getCount() {
return pageList.size();
}
@Override
public boolean isViewFromObject(View view, Object o) {
return o == view;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(pageList.get(position));
return pageList.get(position);
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
}
}
接著只需要在主程式內呼叫它做一些設定就完成了
private void initView() {
mToolbar = (Toolbar) findViewById(R.id.toolbar);
mViewPager = (ViewPager) findViewById(R.id.pager);
mTabLayout = (TabLayout) findViewById(R.id.tabs);
setSupportActionBar(mToolbar);
mTabLayout.addTab(mTabLayout.newTab().setText("Page one"));
mTabLayout.addTab(mTabLayout.newTab().setText("Page two"));
mTabLayout.addTab(mTabLayout.newTab().setText("Page three"));
mViewPager.setAdapter(new SamplePagerAdapter());
initListener();
}
注意:
有時候你會出現閃退的情況
可能會是這個原因
因為 Toolbar 就是要拿來取代 actionbar
所以你必須在 theme 那邊將 Actionbar 設定為 no_actionbar
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
</resources>