Android4:使用TabLayout和ViewPager實現頂部標簽頁

自Android5.0 Lollipop發(fā)布以來,Material Design在Android App中爆炸性增長拔妥,涌現出了一批優(yōu)秀的、擁有Android風格的App。今天的主題是使用新的android.support.design包中的TabLayout配合ViewPager以及實現經典的Android風格—頂部標簽頁许帐。

我將Tab加到了我在做的“ijob” app中,先來看一下最終的效果毕谴。

創(chuàng)建布局文件

布局文件沒有什么好說的成畦,比較簡單距芬,注意區(qū)分控件所在的不同support library。還想多啰嗦幾句循帐。(a) 在Android5.0以后可以輕松地給控件設置陰影效果框仔,android:elevation="8dp"。(b) 如果陰影效果沒有如期顯示拄养,多半是因為忘記給控件設置背景顏色了离斩,其實只要設置了背景顏色,陰影效果就出來了瘪匿。android:background="@android:color/white"

除此之外跛梗,為了實現我們想要的效果,我們可以設置TabLayout的一些屬性棋弥,包括Tab高度核偿、Tab顏色,Tab中Indicator的高度及顏色顽染。

<!--activity_main.xml-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    tools:context=".MainActivity">
    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/color_primary"
        android:elevation="8dp"/>
    <android.support.design.widget.TabLayout
        android:id="@+id/tablayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:tabBackground="@color/color_primary"
        app:tabTextAppearance="@style/MyTabText"
        app:tabIndicatorColor="@android:color/white"
        app:tabIndicatorHeight="3dp"
        android:background="@android:color/white"
        android:elevation="8dp"/>
    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:background="@android:color/white"/>
</LinearLayout>

創(chuàng)建ViewPager適配器

ViewPager的適配器主要是連接TabLayout和將要顯示的多個Fragment漾岳。由于ViewPager是在v4的包中,Fragment在v4和android.app的包中都含有粉寞,如果發(fā)生不對應情況尼荆,很容易掛掉。所以唧垦,在這里羅列出了相關包的版本建議耀找。

  • import android.app.Fragment;
  • import android.app.FragmentManager;
  • import android.support.v13.app.FragmentPagerAdapter;
  • import android.support.v4.view.ViewPager;
// MyFragmentPagerAdapter.java
public class MyFragmentPagerAdapter extends FragmentPagerAdapter {
    private final int PAGE_COUNT = 3;
    private String[] tableTitle = new String[] {"宣講會", "實習", "工作"};
    private Context mContext;
    private List<Fragment> mFragmentTab;
    private SeminarFragment mSeminarFragment;
    private InternFragment mInternFragment;
    private JobFragment mJobFragment;

    public MyFragmentPagerAdapter(FragmentManager fm, Context context) {
        super(fm);
        mContext = context;
        initFragmentTab();
    }

    @Override
    public Fragment getItem(int position) {
        return mFragmentTab.get(position);
    }

    @Override
    public int getCount() {
        return PAGE_COUNT;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return tableTitle[position];
    }

    private void initFragmentTab() {
        mSeminarFragment = new SeminarFragment();
        mInternFragment = new InternFragment();
        mJobFragment = new JobFragment();
        mFragmentTab = new ArrayList<Fragment>();
        mFragmentTab.add(mSeminarFragment);
        mFragmentTab.add(mInternFragment);
        mFragmentTab.add(mJobFragment);
    }
}

設置TabLayout

最后一步就是在我們的MainActivity中對TabLayout進行設置,即把TabLayout控件與Adapter雙向關聯业崖。

// MainActitity.java
private void initTabLayout() {
    MyFragmentPagerAdapter adapter = new MyFragmentPagerAdapter(getFragmentManager(), this);
    ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
    TabLayout tabLayout = (TabLayout) findViewById(R.id.tablayout);
    viewPager.setAdapter(adapter);
    tabLayout.setupWithViewPager(viewPager);
    tabLayout.setTabMode(TabLayout.MODE_FIXED);
    }

引用和鏈接

  1. 本文源代碼:https://github.com/onlytjt/AndroidApp-ijob
  2. http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0731/3247.html
  3. Magerial Design新控件:http://www.jcodecraeer.com/a/anzhuokaifa/developer/2015/0531/2958.html
  4. Android兼容包詳解:http://stormzhang.com/android/2015/03/29/android-support-library/

By tjt

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末野芒,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子双炕,更是在濱河造成了極大的恐慌狞悲,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件妇斤,死亡現場離奇詭異摇锋,居然都是意外死亡,警方通過查閱死者的電腦和手機站超,發(fā)現死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進店門荸恕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人死相,你說我怎么就攤上這事融求。” “怎么了算撮?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵生宛,是天一觀的道長县昂。 經常有香客問我,道長陷舅,這世上最難降的妖魔是什么倒彰? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮莱睁,結果婚禮上待讳,老公的妹妹穿的比我還像新娘。我一直安慰自己仰剿,他們只是感情好创淡,可當我...
    茶點故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著酥馍,像睡著了一般辩昆。 火紅的嫁衣襯著肌膚如雪阅酪。 梳的紋絲不亂的頭發(fā)上旨袒,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天,我揣著相機與錄音术辐,去河邊找鬼砚尽。 笑死,一個胖子當著我的面吹牛辉词,可吹牛的內容都是我干的必孤。 我是一名探鬼主播,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼瑞躺,長吁一口氣:“原來是場噩夢啊……” “哼敷搪!你這毒婦竟也來了?” 一聲冷哼從身側響起幢哨,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤赡勘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后捞镰,有當地人在樹林里發(fā)現了一具尸體闸与,經...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年岸售,在試婚紗的時候發(fā)現自己被綠了践樱。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡凸丸,死狀恐怖拷邢,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情屎慢,我是刑警寧澤解孙,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布坑填,位于F島的核電站,受9級特大地震影響弛姜,放射性物質發(fā)生泄漏脐瑰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一廷臼、第九天 我趴在偏房一處隱蔽的房頂上張望苍在。 院中可真熱鬧,春花似錦荠商、人聲如沸寂恬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽初肉。三九已至,卻和暖如春饰躲,著一層夾襖步出監(jiān)牢的瞬間牙咏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工嘹裂, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留妄壶,地道東北人。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓寄狼,卻偏偏與公主長得像丁寄,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子泊愧,可洞房花燭夜當晚...
    茶點故事閱讀 45,507評論 2 359

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,283評論 25 707
  • 內容抽屜菜單ListViewWebViewSwitchButton按鈕點贊按鈕進度條TabLayout圖標下拉刷新...
    皇小弟閱讀 46,791評論 22 665
  • 嘿伊磺,媳婦兒,我們認識快四年了删咱,結婚也將近一年了吧屑埋。在過去的一年里,最大的收獲就是有了我們愛的結晶腋腮,在不久的將來雀彼,T...
    大老師的草稿本閱讀 508評論 4 6
  • 這兩天成都在下雨,雖然已是初春即寡,空氣中仍殘留著些冬天的濕冷徊哑。 和往常一樣,母親一大早就到我房里來幫忙照看已經睡醒了...
    蔡雨山的雪閱讀 1,532評論 28 34
  • 這一年聪富,夏天不熱 雨水很多 山中郁郁蔥蔥 我踏進溪水莺丑,自由歡暢 迎接新的開始
    麥子的麥浪閱讀 231評論 0 0