1. 程式人生 > >頁面佈局之Tabbar實現(Fragment)

頁面佈局之Tabbar實現(Fragment)

前言:上週沒有更新,這周就把剩下的兩種Tabbar都展示出來!

在上篇文章中介紹了實用TabActivity和TabHost實現底部Tabbar,今天我們使用Fragment實現下底部Tabbar和ViewPager實現可滑動Tabbar。

先看下效果圖:


接下來看看Fragment實現的Tabbar:

第一種:不允許滑動

@Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fragment_click_tabbar);
        initData();
        initUI();
    }

    private void initData() {
        fragmentManager = getSupportFragmentManager();
    }

    private void initUI() {
        tv_click_tab1 = (TextView) findViewById(R.id.tv_click_tab1);
        tv_click_tab2 = (TextView) findViewById(R.id.tv_click_tab2);
        tv_click_tab3 = (TextView) findViewById(R.id.tv_click_tab3);
        tv_click_tab1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                selecFragment(0);
            }
        });
        tv_click_tab2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                selecFragment(1);
            }
        });
        tv_click_tab3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                selecFragment(2);
            }
        });
        selecFragment(0);
    }

    private void selecFragment(int indext){
        FragmentTransaction fragemntTransaction = fragmentManager.beginTransaction();
        hideFragment(fragemntTransaction);
        switch (indext){
            case 0:
                tv_click_tab1.setSelected(true);
                tv_click_tab2.setSelected(false);
                tv_click_tab3.setSelected(false);
                if (null==oneFragment){
                    oneFragment = new OneFragment();
                    fragemntTransaction.add(R.id.content,oneFragment);
                }else {
                    fragemntTransaction.show(oneFragment);
                }
                break;
            case 1:
                tv_click_tab1.setSelected(false);
                tv_click_tab2.setSelected(true);
                tv_click_tab3.setSelected(false);
                if (null==twoFragment){
                    twoFragment = new TwoFragment();
                    fragemntTransaction.add(R.id.content,twoFragment);
                }else {
                    fragemntTransaction.show(twoFragment);
                }
                break;
            case 2:
                tv_click_tab1.setSelected(false);
                tv_click_tab2.setSelected(false);
                tv_click_tab3.setSelected(true);
                if (null==threeFragment){
                    threeFragment = new ThreeFragment();
                    fragemntTransaction.add(R.id.content,threeFragment);
                }else {
                    fragemntTransaction.show(threeFragment);
                }
                break;
            default:
                Toast.makeText(ClickTabbarActivity.this,"該功能暫未開發",Toast.LENGTH_SHORT).show();
                break;
        }
        fragemntTransaction.commit();
    }

    private void hideFragment(FragmentTransaction fragemntTransaction){
        if (fragemntTransaction==null) return;
        if (null!=oneFragment) fragemntTransaction.hide(oneFragment);
        if (null!=twoFragment) fragemntTransaction.hide(twoFragment);
        if (null!=threeFragment) fragemntTransaction.hide(threeFragment);
    }

第二種:使用ViewPager滑動的Tabbar
 @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fragment_slide_tabbar);
        initUI();
        initData();
    }

    private void initUI() {
        viewPager = (ViewPager) findViewById(R.id.content);
        tv_click_tab1 = (TextView) findViewById(R.id.tv_click_tab1);
        tv_click_tab2 = (TextView) findViewById(R.id.tv_click_tab2);
        tv_click_tab3 = (TextView) findViewById(R.id.tv_click_tab3);
        tv_click_tab1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                selecFragment(0);
            }
        });
        tv_click_tab2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                selecFragment(1);
            }
        });
        tv_click_tab3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                selecFragment(2);
            }
        });
        viewPager.addOnPageChangeListener(this);
    }

    private void initData(){
        OneFragment oneFragment = new OneFragment();
        TwoFragment twoFragment = new TwoFragment();
        ThreeFragment threeFragment = new ThreeFragment();
        List<Fragment> fragmentList = new ArrayList<>();
        fragmentList.add(oneFragment);
        fragmentList.add(twoFragment);
        fragmentList.add(threeFragment);
        FragmentAdapter fragmentAdapter = new FragmentAdapter(getSupportFragmentManager(), fragmentList);
        viewPager.setAdapter(fragmentAdapter);
        selecFragment(0);
    }

    private void selecFragment(int indext){
        switch (indext){
            case 0:
                tv_click_tab1.setSelected(true);
                tv_click_tab2.setSelected(false);
                tv_click_tab3.setSelected(false);
                break;
            case 1:
                tv_click_tab1.setSelected(false);
                tv_click_tab2.setSelected(true);
                tv_click_tab3.setSelected(false);
                break;
            case 2:
                tv_click_tab1.setSelected(false);
                tv_click_tab2.setSelected(false);
                tv_click_tab3.setSelected(true);
                break;
            default:
                Toast.makeText(SlideTabbarActivity.this,"該功能暫未開發",Toast.LENGTH_SHORT).show();
                break;
        }
        if (indext<3) viewPager.setCurrentItem(indext);
    }

    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
        Log.i("viewPageInfo>>>","position:"+String.valueOf(position)+";offset:"+String.valueOf(positionOffset)+";OffsetPixels:"+String.valueOf(positionOffsetPixels));
    }

    @Override
    public void onPageSelected(int position) {
        selecFragment(position);
    }

    @Override
    public void onPageScrollStateChanged(int state) {
        Log.i("viewPageInfo>>>","state:"+String.valueOf(state));
    }

他們共用一個xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorGray">

    <XXXX
        android:id="@+id/content"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:orientation="horizontal"
        android:background="@color/colorWhite">

        <TextView
            android:id="@+id/tv_click_tab1"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            style="@style/tabbar_radio"
            android:drawableTop="@drawable/tabbar_button1"
            android:text="@string/tab_one"
            />
        <TextView
            android:id="@+id/tv_click_tab2"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            style="@style/tabbar_radio"
            android:drawableTop="@drawable/tabbar_button2"
            android:text="@string/tab_two"
            />
        <TextView
            android:id="@+id/tv_click_tab3"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            style="@style/tabbar_radio"
            android:drawableTop="@drawable/tabbar_button3"
            android:text="@string/tab_three"
            />
    </LinearLayout>

</LinearLayout>
其中XXXX第一種是FrameLayout,第二種是android.support.v4.view.ViewPager

最後附上三種Tabbar實現的連結:點選開啟連結

相關推薦

頁面佈局Tabbar實現Fragment

前言:上週沒有更新,這周就把剩下的兩種Tabbar都展示出來! 在上篇文章中介紹了實用TabActivity和TabHost實現底部Tabbar,今天我們使用Fragment實現下底部Tabbar和ViewPager實現可滑動Tabbar。 先看下效果圖: 接下來看看Fr

webrtc QOS方法FEC實現待續

一、概述 webrtc冗餘打包方式有四種:Red(rfc2198)、Ulpfec(rfc5109)、Flexfec(草案)。其中Red和Ulpfec要成對使用。 二、RedFEC 三、UlpF

Hibernate 快取 Session 實現

首先以查詢學生為例,模擬一個快取的機制 public class Test { public static void main(String[] args) throws Exception { MyClassDao myClassDao = new

SAP-MM自動記賬解析功能實現02

5. 定義移動型別 配置路徑:SPRO—物料管理—庫存管理和實際庫存—移動型別—複製,更改移動型別 T-CODE:OMJJ 由於移動型別涉及到的細節要素過於繁雜,且每個要素都尤為重要,一般情況下,建議在通過複製系統原有移動型別新增企業自定義移動型別,降低出錯機率。 此

STLmap實現

map其實就是一個對映,想象你在使用新華字典的時候,輸入一個單詞,就能得到這個單詞的意思,這樣就形成了一個對映。 為了實現map,你需要有類和物件,虛擬函式,模板,pair型別基礎 首先,介紹一下模板,看下面的函式(重複做同樣事情的函式,只是型別不一樣) int sum

從零開始學 Web 移動Web實現JD分類頁面

實現JD分類頁面 我們先看看要實現的效果圖: 1、專案需求: 全屏頁面 右側的頁面隨著頁面寬度的變化而變化,左側欄寬度固定不變。 左側欄可以上下滑動,如果滑動超出上下範圍自動反彈回去 點選左側欄每個專案,自動滾動左側欄使得專案置頂 當點選專案可能使得超出滑動範圍的時候,以滑動範圍為準,當前點選的專案不

CSS頁面佈局表格佈局完結

表格佈局也是非常常見的佈局方式。就是指定CSS表格式樣。 這與HTML的<table>元素不同,<table>元素多用於頁面上顯示錶格資料。而表格佈局是指通過CSS表格式樣將頁面顯示部分表格化顯示出來。 實現方式就是先將HTML端的元素用<di

CSS頁面佈局凝膠布局

介於流體佈局(Float Layout)和凍結佈局(Frozen Layout)間的就是凝膠布局(Jello Layout) 實現方式:在凍結佈局的基礎上,設定CSS端的margin-left/right為auto 第一步就是實現凍結佈局(請參照前一篇博文《CSS之頁面佈

MVC實戰排球計分—— View設計與實現

service family 角色 元素 需要 rom 之前 con xsl (view)視圖 視圖是用戶看到並與之交互的界面。對老式的Web應用程序來說,視圖就是由HTML元素組成的界面,在新式的Web應用程序中,HTML依舊在視圖中扮演著重要的角色,但一些新的技術已層出

MVC實戰排球計分—— Controller的設計與實現

需要 strong 技術 ret web src alt 點擊 cnblogs 控制器 控制器接受用戶的輸入並調用模型和視圖去完成用戶的需求。所以當單擊Web頁面中的超鏈接和發送HTML表單時, 控制器本身不輸出任何東西和做任何處理。它只是接收請求並決定調用哪個模型構件去處

MVC開發排球計分接口的實現

tde ron list cat model 封裝 ora sin erl 接口的實現 接口的用途: 接口是契約,它是方法聲明的集合,封裝了一些類共有的行為(方法)。 即裏面定義方法時只寫到參數部分就用分號結束了;必須有某個/些類來實現接口才會有意義。 實現接口

MVC系列博客排球計分模型類的實現

layers 自動生成 ext alt 感覺 名稱 數據 string 後來 最初我使用的是連接數據庫的方法來建立數據連接的,後來聽了同學用EF框架來生成數據庫自動連接,感覺很好用,然後我就重新用EF框架生成數據庫 使用EF框架生成數據庫,要有相應的模型類,模型類如下:

MVC系列博客排球計分視圖的實現

ont shtml dev 相關 control 沒有 mage evel 技術分享 Views 文件夾 Views 文件夾存儲的是與應用程序顯示(用戶界面)相關的文件(HTML 文件)。根據所采用的語言內容,這些文件可能擴展名可能是 html、asp、aspx、cshtm

深度學習實踐系列--身份證上漢字及數字識別系統的實現

手動 ear 常用 env 窗口 mic 文件下載 oot edr 前言: 本文章將記錄我利用深度學習方法實現身份證圖像的信息識別系統的實現過程,及學習到的心得與體會。本次實踐是我投身AI的初次系統化的付諸實踐,意義重大,讓自己成長許多。終於有空閑的時間,將其

Spring源碼閱讀Springs-beans容器的基本實現

beans 閱讀 gin com -i add wid ans lock 一、Spring-beans Spring源碼閱讀之Springs-beans(一)容器的基本實現

在STM32上實現NTFS4:GPT分區表的C語言實現1:主GPT表頭的實現

center mbr分區 sum 對齊 字節數 決定 容器 alt 水平 題外話:在荒廢了很久沒有更新之後……某日突然收到讀者的站內信!內容大體是詢問GPT分區表信息的讀取方式,筆者激動萬分之下,決定繼續解剖NTFS……其實GPT嚴格上不算是NTFS的內容, GPT和M

在STM32上實現NTFS5:GPT分區表的C語言實現2GPT實現以及統一方式讀取磁盤分區

tfs 下載 數據 特殊 dpt 屬性列表 handle 系統分區 成了   上一節實現了主GPT頭的信息提取,這一節繼續提取整個的GPT數據,並且將GPT分區表和MBR分區表兩種格式融合成一個模塊,使主調函數(也可以說是使用者)不需要關心磁盤的分區表類型:它太底層了,確實

Spring3 Schedule Task註解實現 兩次起動Schedule Task 的解決方案

什麽 empty task 文件中 註解 work lin schedule ask Spring3 Schedule Task之註解實現 (兩次起步Schedule Task 的解決方案)Spring3 Schedule Task之註解實現 (兩次啟動Schedule T

瀏覽器外掛ActiveX開發----web頁面呼叫ActiveX

轉自:http://www.cnblogs.com/qguohog/archive/2013/01/25/2876828.html https://blog.csdn.net/zengraoli/article/details/12078757?utm_source=blogxgwz3 &n

嵌入式核心及驅動開發學習筆記 非同步通訊+中斷實現讀取資料

對於linux一切都是檔案,驅動裝置在應用層也是以檔案的形式進行讀寫。之前學了阻塞、非阻塞、多路複用的方式讀裝置,它們都需要應用主動讀取。那麼應用層有沒有一種方式,當底層將資料準備好了,應用程式自動處理這些資料?通過非同步通訊可以實現,這有寫類似硬體層的中斷概念 驅動層(準備好了資料) --&g