Android 台灣中文網
標題:
Material Design > TabLayout篇
[打印本頁]
作者:
ploglin
時間:
2016-3-26 11:21
標題:
Material Design > TabLayout篇
本帖最後由 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 的屬性
app:tabMode="scrollable"
複製代碼
這是代表 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();
}
}
複製代碼
歡迎光臨 Android 台灣中文網 (https://apk.tw/)
Powered by Discuz! X3.1