天天看點

使用Android Support Design 控件TabLayout 友善快捷實作頁籤功能

設計風格的ui效果,為了可以使用這些新穎md元件首先必須要在android studio的sdk的extra支援庫安裝android support library支援庫,如下所示

使用Android Support Design 控件TabLayout 友善快捷實作頁籤功能

該元件在design庫中是以還需要在as中添加依賴庫

file——project struct

右鍵app選擇library dependancy

使用Android Support Design 控件TabLayout 友善快捷實作頁籤功能

選擇design庫

使用Android Support Design 控件TabLayout 友善快捷實作頁籤功能

然後as會自動幫我們在app的build.gradle檔案下添加依賴如下圖,由于

tablayout配合v ierpager,是以還需要導入viewerpager的依賴庫 support-v4包,(就是上圖的正數第二個庫)

到此,準備工作已經搞定!

本例主要通過tablayout實作頁籤切換功能,這裡實作了一個架構,比較簡單,效果圖如下,可以直接拿去加點擴充使用

使用Android Support Design 控件TabLayout 友善快捷實作頁籤功能

首先要在布局檔案中引入tablayout和viewpager,然後在activity通過adapter關聯 vierpager,内部每個頁面通常是個fragment

引入倆個元件,

常用屬性如下(需要引入xmlns:app="http://schemas.android.com/apk/res-auto")

    app:tabselectedtextcolor:tab被選中字型的顔色

    app:tabtextcolor:tab未被選中字型的顔色

    app:tabindicatorcolor:tab訓示器下标的顔色

<span style="font-size:18px;"><linearlayout xmlns:android="http://schemas.android.com/apk/res/android"  

    xmlns:app="http://schemas.android.com/apk/res-auto"  

    xmlns:tools="http://schemas.android.com/tools"  

    android:layout_width="match_parent"  

    android:layout_height="match_parent"  

    android:orientation="vertical"  

    tools:context=".mainactivity">  

    <android.support.design.widget.tablayout  

        android:id="@+id/id_tablayout"  

        android:layout_width="match_parent"  

        android:layout_height="wrap_content"  

        android:background="#ffffffff"  

        app:tabgravity="fill"  

        app:tabindicatorcolor="#ff007aa2"  

        app:tabmode="fixed"  

        app:tabtextcolor="#ff000000">  

    </android.support.design.widget.tablayout>  

    <android.support.v4.view.viewpager  

        android:id="@+id/id_viewpager"  

        android:layout_height="0dp"  

        android:layout_weight="1"  

        >  

    </android.support.v4.view.viewpager>  

</linearlayout>  

</span>  

這裡是倆個頁籤,是以實作倆個fragment,省略下面有整個demo代碼

一般tablayout都是和viewpager共同使用才發揮它的優勢

<span style="font-size:18px;">package com.elvis.tablayout_demo;  

import android.os.bundle;  

import android.support.design.widget.tablayout;  

import android.support.v4.app.fragment;  

import android.support.v4.app.fragmentpageradapter;  

import android.support.v4.view.viewpager;  

import android.support.v7.app.appcompatactivity;  

import android.view.menu;  

import android.view.menuitem;  

import com.elvis.tablayout_demo.fragment.fragmenthotrec;  

import com.elvis.tablayout_demo.fragment.fragmenthotpot;  

import java.util.arraylist;  

import java.util.list;  

public class mainactivity extends appcompatactivity {  

    private tablayout mtablayout;  

    private viewpager mviewpager;  

    private list<fragment> list_fragment;  

    private fragmenthotpot mhotpot;  

    private fragmenthotrec mhotrec;  

    //tablayout的标題  

    private string[] mtitles = new string[]{"今日熱點","熱門推薦"};  

    @override  

    protected void oncreate(bundle savedinstancestate) {  

        super.oncreate(savedinstancestate);  

        setcontentview(r.layout.activity_main);  

        initviews();  

    }  

    private void initviews() {  

        mtablayout = (tablayout) findviewbyid(r.id.id_tablayout);  

        mviewpager = (viewpager) findviewbyid(r.id.id_viewpager);  

        mhotpot = new fragmenthotpot();  

        mhotrec = new fragmenthotrec();  

        list_fragment = new arraylist<>();  

        list_fragment.add(mhotpot);  

        list_fragment.add(mhotrec);  

        /*viewpager通過擴充卡與fragment關聯*/  

        mviewpager.setadapter(new fragmentpageradapter(getsupportfragmentmanager()) {  

            @override  

            public fragment getitem(int position) {  

                return list_fragment.get(position);  

            }  

            public int getcount() {  

                return mtitles.length;  

            public charsequence getpagetitle(int position) {  

                return mtitles[position];  

        });  

        //tablayout和viewpager的關聯  

        mtablayout.setupwithviewpager(mviewpager);  

    public boolean oncreateoptionsmenu(menu menu) {  

        // inflate the menu; this adds items to the action bar if it is present.  

        getmenuinflater().inflate(r.menu.menu_main, menu);  

        return true;  

    public boolean onoptionsitemselected(menuitem item) {  

        // handle action bar item clicks here. the action bar will  

        // automatically handle clicks on the home/up button, so long  

        // as you specify a parent activity in androidmanifest.xml.  

        int id = item.getitemid();  

        //noinspection simplifiableifstatement  

        if (id == r.id.action_settings) {  

            return true;  

        }  

        return super.onoptionsitemselected(item);  

}  

這裡tablayout很多屬性在xml檔案設定了,在代碼中也可通過其方法自己設定,常用方法如下

- addtab(tablayout.tab tab, int position, boolean setselected) 增加頁籤到 layout 中

- addtab(tablayout.tab tab, boolean setselected) 同上

- addtab(tablayout.tab tab) 同上

- gettabat(int index) 得到頁籤

- gettabcount() 得到頁籤的總個數

- gettabgravity() 得到 tab 的 gravity

- gettabmode() 得到 tab 的模式

- gettabtextcolors() 得到 tab 中文本的顔色

- newtab() 建立個 tab

- removealltabs() 移除所有的 tab

- removetab(tablayout.tab tab) 移除指定的 tab

- removetabat(int position) 移除指定位置的 tab

- setontabselectedlistener(tablayout.ontabselectedlistener ontabselectedlistener) 為每個 tab 增加選擇監聽器

- setscrollposition(int position, float positionoffset, boolean updateselectedtext) 設定滾動位置

- settabgravity(int gravity) 設定 gravity

- settabmode(int mode) 設定 mode,有兩種值:tablayout.mode_scrollable和tablayout.mode_fixed分别表示當tab的内容超過螢幕寬度是否支援橫向水準滑動,第一種支援滑動,第二種不支援,預設不支援水準滑動。

- settabtextcolors(colorstatelist textcolor) 設定 tab 中文本的顔色

- settabtextcolors(int normalcolor, int selectedcolor) 設定 tab 中文本的顔色 預設 選中

- settabsfrompageradapter(pageradapter adapter) 設定 pageradapter

- setupwithviewpager(viewpager viewpager) 和 viewpager 關聯

這裡隻是搭了一個架構,自己去添枝加葉吧~

轉載:http://blog.csdn.net/xsf50717/article/details/49405309

繼續閱讀