馬上加入Android 台灣中文網,立即免費下載應用遊戲。
您需要 登錄 才可以下載或查看,沒有帳號?註冊
x
本帖最後由 ploglin 於 2016-3-28 09:23 編輯
開發工具:Android Studio
TabLayout 是 Google 針對 Material Design 所出的其中一個套件,在這裡想介紹大家如何去使用。
因為 Design 並未內建在 SDK 中,所以我們要掛個 Library
首先在 Gradle 中加入
- compile "com.android.support:appcompat-v7:23.0.1"
- compile "com.android.support:design:23.0.1"
複製代碼
先看一下 XML 的擺放方式
- <?xml version="1.0" encoding="utf-8"?>
- <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- android:id="@+id/main_content"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:fitsSystemWindows="true">
- <android.support.design.widget.AppBarLayout
- android:id="@+id/appbar"
- 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/tabs"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:background="@android:color/white"
- app:layout_scrollFlags="scroll|enterAlways"
- app:tabMode="scrollable"
- app:tabTextAppearance="?android:attr/textAppearanceMedium" />
- </android.support.design.widget.AppBarLayout>
- <android.support.v4.view.ViewPager
- android:id="@+id/viewpager"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- app:layout_behavior="@string/appbar_scrolling_view_behavior" />
- </android.support.design.widget.CoordinatorLayout>
複製代碼
這邊說明一下 CoordinatorLayout 以及 AppBarLayout,這兩個元件也是 Material Design 的相關效果。我在 ViewPager 的地方放了
- app:layout_behavior="@string/appbar_scrolling_view_behavior"
複製代碼
宣告 AppBarLayout 的行為主要是根據 ViewPager,所以當 ViewPager 的畫面在 Scroll 的時候,上方的 AppBarLayout 就會根據我的其它設定而動作。
大家可以看到,我在 TabLayout 放了
- app:layout_scrollFlags="scroll|enterAlways"
複製代碼
表示當畫面在 scroll 的時候, TabLayout會跟著 scroll,但卻不會消失在畫面上,會一直固定在最上方。
Toolbar 的部份我沒有下,就代表當畫面在 scroll 的時候,Toolbar 是會消失的。
如果你有實作,你就會知道我在說什麼了,哈。
另外我們來看看 TabLayout 的屬性
這是代表 Tablayout 可以 scroll 的,當 tab 很多的時候就會有效果,另外也可以下 fix 的模式唷。
再來就跟大家說要怎麼生成內容呢?其實 TabLayout 是跟 ViewPager 綁在一起的唷,所以...
- ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
- TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
- // 為 viewpager 建立 adapter
- Adapter adapter = new Adapter(getSupportFragmentManager());
- viewPager.setAdapter(adapter);
- // TabLayout 綁定 viewpager
- tabLayout.setupWithViewPager(viewPager);
- // 生成內容,這邊隨便寫的,請按造你自己的需求去修改
- for (int i = 0; i < 5; i++) {
- HashMap<String, Object> object = new HashMap<String, Object>();
- object.put("title", "title"+Integer.toString(i));
- adapter.addFragment(new GameSumFragment(), object);
- }
- // Adapter 實作的 class
- class Adapter extends FragmentStatePagerAdapter {
- private final List<Fragment> mFragments = new ArrayList<>();
- private final List<HashMap<String, Object>> mFragmentList = new ArrayList<>();
- private FragmentManager fragmentManager;
- public Adapter(FragmentManager fm) {
- super(fm);
- fragmentManager = fm;
- }
- public void addFragment(Fragment fragment, HashMap<String, Object> map) {
- Bundle bundle = new Bundle();
- bundle.putString("title", map.get("title").toString());
- fragment.setArguments(bundle);
- mFragments.add(fragment);
- mFragmentList.add(map);
- }
- @Override
- public Fragment getItem(int position) {
- return mFragments.get(position);
- }
- @Override
- public int getCount() {
- return mFragments.size();
- }
- @Override
- public CharSequence getPageTitle(int position) {
- HashMap<String, Object> map = mFragmentList.get(position);
- return map.get("title").toString();
- }
- }
複製代碼 |
|