綁定帳號登入

Android 台灣中文網

打印 上一主題 下一主題

[教程] Material Design > TabLayout篇

[複製連結] 查看: 1239|回覆: 0|好評: 0
跳轉到指定樓層
樓主
ploglin | 收聽TA | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
發表於 2016-3-26 11:21

馬上加入Android 台灣中文網,立即免費下載應用遊戲。

您需要 登錄 才可以下載或查看,沒有帳號?註冊

x
本帖最後由 ploglin 於 2016-3-28 09:23 編輯

開發工具:Android Studio

TabLayout 是 Google 針對 Material Design 所出的其中一個套件,在這裡想介紹大家如何去使用。

因為 Design 並未內建在 SDK 中,所以我們要掛個 Library

首先在 Gradle 中加入

  1. compile "com.android.support:appcompat-v7:23.0.1"
  2. compile "com.android.support:design:23.0.1"
複製代碼


先看一下 XML 的擺放方式

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3.     xmlns:app="http://schemas.android.com/apk/res-auto"
  4.     android:id="@+id/main_content"
  5.     android:layout_width="match_parent"
  6.     android:layout_height="match_parent"
  7.     android:fitsSystemWindows="true">

  8.     <android.support.design.widget.AppBarLayout
  9.         android:id="@+id/appbar"
  10.         android:layout_width="match_parent"
  11.         android:layout_height="wrap_content"
  12.         android:theme="@style/AppTheme.AppBarOverlay">

  13.     <android.support.v7.widget.Toolbar
  14.         android:id="@+id/toolbar"
  15.         android:layout_width="match_parent"
  16.         android:layout_height="?attr/actionBarSize"
  17.         android:background="?attr/colorPrimary"
  18.         app:popupTheme="@style/AppTheme.PopupOverlay"/>

  19.         <android.support.design.widget.TabLayout
  20.             android:id="@+id/tabs"
  21.             android:layout_width="match_parent"
  22.             android:layout_height="wrap_content"
  23.             android:background="@android:color/white"
  24.             app:layout_scrollFlags="scroll|enterAlways"
  25.             app:tabMode="scrollable"
  26.             app:tabTextAppearance="?android:attr/textAppearanceMedium" />

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

  28.     <android.support.v4.view.ViewPager
  29.         android:id="@+id/viewpager"
  30.         android:layout_width="match_parent"
  31.         android:layout_height="match_parent"
  32.         app:layout_behavior="@string/appbar_scrolling_view_behavior" />

  33. </android.support.design.widget.CoordinatorLayout>
複製代碼


這邊說明一下 CoordinatorLayout 以及 AppBarLayout,這兩個元件也是 Material Design 的相關效果。我在 ViewPager 的地方放了
  1. app:layout_behavior="@string/appbar_scrolling_view_behavior"
複製代碼

宣告 AppBarLayout 的行為主要是根據 ViewPager,所以當 ViewPager 的畫面在 Scroll 的時候,上方的 AppBarLayout 就會根據我的其它設定而動作。

大家可以看到,我在 TabLayout 放了
  1. app:layout_scrollFlags="scroll|enterAlways"
複製代碼

表示當畫面在 scroll 的時候, TabLayout會跟著 scroll,但卻不會消失在畫面上,會一直固定在最上方。

Toolbar 的部份我沒有下,就代表當畫面在 scroll 的時候,Toolbar 是會消失的。

如果你有實作,你就會知道我在說什麼了,哈。

另外我們來看看 TabLayout 的屬性
  1. app:tabMode="scrollable"
複製代碼

這是代表 Tablayout 可以 scroll 的,當 tab 很多的時候就會有效果,另外也可以下 fix 的模式唷。

再來就跟大家說要怎麼生成內容呢?其實 TabLayout 是跟 ViewPager 綁在一起的唷,所以...


  1.         ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
  2.         TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);

  3.         // 為 viewpager 建立 adapter
  4.         Adapter adapter = new Adapter(getSupportFragmentManager());
  5.         viewPager.setAdapter(adapter);
  6.         // TabLayout 綁定 viewpager
  7.         tabLayout.setupWithViewPager(viewPager);

  8.         // 生成內容,這邊隨便寫的,請按造你自己的需求去修改
  9.         for (int i = 0; i < 5; i++) {
  10.             HashMap<String, Object> object = new HashMap<String, Object>();
  11.             object.put("title", "title"+Integer.toString(i));
  12.             adapter.addFragment(new GameSumFragment(), object);
  13.         }

  14.         // Adapter 實作的 class
  15.     class Adapter extends FragmentStatePagerAdapter {
  16.         private final List<Fragment> mFragments = new ArrayList<>();
  17.         private final List<HashMap<String, Object>> mFragmentList = new ArrayList<>();
  18.         private FragmentManager fragmentManager;

  19.         public Adapter(FragmentManager fm) {
  20.             super(fm);
  21.             fragmentManager = fm;
  22.         }

  23.         public void addFragment(Fragment fragment, HashMap<String, Object> map) {
  24.             Bundle bundle = new Bundle();
  25.             bundle.putString("title", map.get("title").toString());
  26.             fragment.setArguments(bundle);
  27.             mFragments.add(fragment);
  28.             mFragmentList.add(map);
  29.         }

  30.         @Override
  31.         public Fragment getItem(int position) {
  32.             return mFragments.get(position);
  33.         }

  34.         @Override
  35.         public int getCount() {
  36.             return mFragments.size();
  37.         }

  38.         @Override
  39.         public CharSequence getPageTitle(int position) {
  40.             HashMap<String, Object> map = mFragmentList.get(position);
  41.             return map.get("title").toString();
  42.         }
  43.     }
複製代碼
「用Android 就來APK.TW」,快來加入粉絲吧!
Android 台灣中文網(APK.TW)
收藏收藏 分享分享 分享專題
用Android 就來Android 台灣中文網(https://apk.tw)
回覆

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則