1. 程式人生 > >Fragment+Tablayout + BottomTabBar雙導航欄實現

Fragment+Tablayout + BottomTabBar雙導航欄實現

https://mp.csdn.net/postedit

點選開啟連結.可以打賞一下或者加個關注

    //底部導航
    compile 'com.hjm:BottomTabBar:1.1.1'
    //tablayout
    implementation 'com.android.support:design:26.+'
    compile 'com.android.support:support-v4:26.+'

 //控制元件佈局(佈局是在實現底部導航欄的類佈局裡)

<?xml version="1.0" encoding="utf-8"?>
<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"
    tools:context="com.month1.MainActivity">

    <com.hjm.bottomtabbar.BottomTabBar
        android:id="@+id/bottom_tab_bar"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >
    </com.hjm.bottomtabbar.BottomTabBar>

</LinearLayout>
//Tablayout佈局是放在實現頂部導航欄類的佈局(暫定為A,下面有程式碼)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
 >
 <android.support.design.widget.TabLayout
     android:id="@+id/tablayout"
     android:layout_width="match_parent"
     android:layout_height="wrap_content" />

 <android.support.v4.view.ViewPager
     android:id="@+id/viewpager"
     android:layout_width="match_parent"
     android:layout_height="0dp"
     android:layout_weight="1">
 </android.support.v4.view.ViewPager>
</LinearLayout>
//框架佈局就是這樣了,然後是程式碼操作,在這裡我做的是抽取基類的操作
 //抽取的是Activity的基類

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;

/**
 * Created by lenovo on 2018/4/25.
 */

public abstract class BaseActivity<T> extends AppCompatActivity {
    public T persenter;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getSupportActionBar().hide();
        setContentView(getViewID());
        persenter = getPersenter();
        initView();
        initData();

    }

    protected abstract int getViewID();
    protected abstract void initView();
    protected abstract void initData();
    protected abstract T getPersenter();
}

//抽取Fragment的基類

 


import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;


/**
 * Created by lenovo on 2018/4/25.
 */

public abstract class BaseFragment extends Fragment {
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = LayoutInflater.from(getContext()).inflate(getLayoutID(),container,false);
        initView(view);
        initData();
        return view;

    }
    protected abstract int getLayoutID();
    protected abstract void initView(View view);
    protected abstract void initData();
}

//基類抽取完成後先看MainActivity類



public class MainActivity extends BaseActivity{
    //得到底部導航的控制元件並操作
    private BottomTabBar bottomTabBar;

    @Override
    protected int getViewID() {
          return R.layout.activity_main;
    }

    @Override
    protected void initView() {
        bottomTabBar= findViewById(R.id.bottom_tab_bar);
    }


    @Override
    protected Object getPersenter() {
        return null;
    }


    @Override
    protected void initData() {
        bottomTabBar.init(getSupportFragmentManager())
                .setImgSize(50,50)
                .setFontSize(8)
                .setTabPadding(4,6,10)
                .setChangeColor(Color.RED, Color.DKGRAY)
                //fragment看下面的模板
                .addTabItem("首頁",R.mipmap.a, OneFragment.class)
                .addTabItem("優惠",R.mipmap.b, TwoFragment.class)
                .addTabItem("分類",R.mipmap.c, TreeFragment.class)
                .addTabItem("我的",R.mipmap.d, ForFragment.class)
                .isShowDivider(false)
                .setOnTabChangeListener(new BottomTabBar.OnTabChangeListener() {
                    @Override
                    public void onTabChange(int position, String name) {

                    }
                });
    }




}

//實現底部導航的佈局就完成了(Fragment類大家就給大家一個模板,其他的Fragment類也一下),同時也實現了頂部導航

public class OneFragment extends BaseFragment {


    private String[] titles = {"頁面1", "頁面2"};
    private TabLayout tablayout;
    private ViewPager viewpager;
    private List<Fragment> fragments;
    private MyAdapter adapter;

    @Override
    protected int getLayoutID() {
        return R.layout.layout_one;
    }

    @Override
    protected void initView(View view) {
        tablayout = view.findViewById(R.id.tablayout);
        viewpager = view.findViewById(R.id.viewpager);
        //頁面,資料來源
        fragments = new ArrayList<>();
        fragments.add(new OneFragment1());
        fragments.add(new OneFragment2());
         //ViewPager的介面卡
        adapter = new MyAdapter(getActivity().getSupportFragmentManager());
        viewpager.setAdapter(adapter);
        //繫結
        tablayout.setupWithViewPager(viewpager);

    }

    @Override
    protected void initData() {

    }
       class MyAdapter extends FragmentPagerAdapter {

        public MyAdapter(FragmentManager fm) {
            super(fm);
        }
        @Override
        public Fragment getItem(int position) {
            return fragments.get(position);
        }

        @Override
        public int getCount() {
            return fragments.size();
        }

        //重寫這個方法,將設定每個Tab的標題
        @Override
        public CharSequence getPageTitle(int position) {
            return titles[position];
        }
    }
}

//頂部航的類

OneFragment1 ,它是在OneFragment中的
public class OneFragment1 extends BaseFragment {
    @Override
    protected int getLayoutID() {
        return R.layout.layoutone1;
    }

    @Override
    protected void initView(View view) {

    }

    @Override
    protected void initData() {

    }
}

相關推薦

Fragment+Tablayout + BottomTabBar導航實現

https://mp.csdn.net/postedit 點選開啟連結.可以打賞一下或者加個關注 //底部導航 compile 'com.hjm:BottomTabBar:1.1.1' //tablayout implementatio

底部導航實現頁面的切換(一):Fragment + LinearLayout + TextView

Fragment + LinearLayout + TextView 實現底部導航欄的切換(一) 知識點 先看效果圖: 專案結構圖: 實現邏輯: 頂部是Linea

導航實現

批次 input ren fix isp -- 遮罩 position 刪除 導航欄實現之滾動條,本博客的滾動條的其中一部分細節就是這個 <style> .greyBox{position: fixed;top: 0;left: 0;width:

android4.4以上沉浸式狀態列和導航實現以及Bar的其他管理

自從android4.4開始,android手機狀態列再也不是一成黑的時代,之前叫做變色龍,miui6釋出會把他叫做沉浸式,之後大家就自然而然的接受了沉浸式這個名稱,其實實際應該叫做Translucent Bar,即為透明狀態列。   沉浸式實現原理其實是使整個activity佈局延伸到整個螢幕,然

Android 養成記-1--1.2 導航實現

先來幾張效果圖,看圖說話: 側邊欄 底部導航欄: 1 側邊導航欄實現 側邊導航欄主要是採用android 的佈局layout 來實現:    1) 在專案目錄下新建 wiget 目錄,新增NoSlideDrawerLayout.java

Android底部導航實現(二)之RadioGroup

這裡簡單記錄一下Android底部導航欄通過RadioGroup+Fragment的實現。 這裡寫圖片描述 佈局: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:and

iOS逆向之分析微信導航實現

最近需要實現微信的毛玻璃導航欄效果,嘗試了各種方式後還是有點差別,這在追求完美的設計師眼裡是絕不能忍的,於是只好“看看”原作是怎麼實現的。在逆向分析了微信的實現後,發現微信的實現十分特殊,文末會告訴大家答案:) 環境準備 一臺越獄裝置 OpenSSH 外掛 Cycript 外

Android沉浸式狀態列及導航實現

Android在4.4版本以後開始出現狀態列及導航欄透明化 實現程式碼如下 If (Build.Version.Sdk_Int >= Build.Version_Codes.Kitkat)

Fragment+ViewPager實習頂部導航效果

閒話不多說,先上效果圖 可以看到我們要實現的效果有兩個: 1.滑動ViewPager的時候,頂部的黃色橫條跟著一起滑動。當滑動完畢的時候,ViewPager對應的標題的顏色發生改變。 2.當點選一個標題的時候,ViewPager顯示對應的Fragment,然後顏色也跟著改

樓層導航實現

//點選回到當前樓層aNav.click(function () {    var t = aDiv.eq($(this).index()).offset().top;    $('body,html').animate({        "scrollTop": t,   

Android design包自定義tablayout的底部導航

以前做專案大多用的radiobutton,今天用tablayout來做一個tab切換頁面的的效果 實現的效果就是類似QQ.微信的頁面間(也就是Fragment間)的切換.如圖: 佈局只要一個tablayout <android.support.d

QT之導航實現

有道詞典大家一定用過,今天要分享的就是類似與有道詞典側邊導航欄的做法(PS:有道詞典 用的不是QT技術實現的   而是 Hex技術  點選檢視詳情) 上圖就是有道詞典的導航欄 開始正題,如何用QT

Android (爭取做到)最全的底部導航實現方法

本文(爭取做到)Android 最全的底部導航欄實現方法. 現在寫了4個主要方法. 還有一些個人感覺不完全切題的方法也會簡單介紹一下. 方法一. ViewPager + List<View> + PagerAdapter 先看a

底部導航實現

      底部導航欄我選擇用FragmentTabHost+Fragment來實現,這個方法比較好用,程式碼量也不多       首先是開始的activity_main.xml <RelativeLayout xmlns:android="http://schemas

TabLayout+ViewPager+Fragment實現頂部或底部導航

以前看慕課網的教程,寫過一個微信Tab選項卡切換的例子,使用的是ViewPager+Fragment來實現的,說實話,當時為了實現一些效果,還是寫了蠻多的程式碼,但是,今天介紹的TabLayout+ViewPager+Fragment實現導航欄可以使用很少的程式

tablayout+viewpager+fragment實現頁面底部導航

先附上效果圖第一步:書寫佈局我的佈局檔案是這樣的<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/an

TabLayout與viewpager實現頂部導航

TabLayout是design包的一個元件,常與viewpager搭配使用,主要是因為用法簡單,而且效果也好。下面是效果圖 接下來說說用法:首先匯入依賴 compile 'com.android.support:design:25.3.1' 佈局檔案:activity_

超簡單的ViewPager導航聯動實現--TabLayout

效果如下: 實現這個效果非常的簡單,就兩個控制元件,一個TabLayout,一個ViewPager,主要通過TabLayout的setupWithViewPager()方法來使TabLayout和ViewPager聯動 下面說說具體實現步驟。 1,TabLayout有自己

AppBarLayout+TabLayout+RecyclerView實現滑動隱藏導航

先看效果圖。 其實現思路是這樣的,整體佈局用CoordinatorLayout,然後裡面加入AppBarLayout,這個bar容器裡面放入toolbar和TabBar,下面再加入一viewpager,類裡面讓它與TabLayout聯動,RecycleView則放在vie

通過TabLayout自定義tab實現圖文混搭導航

國際慣例先看效果 好久不見,最近沉默與需求無法自拔,也根據最近的小需求做出一篇使用性的教程,內容不難。 本效果是使用谷歌提供的design庫中的tabyout來實現的效果 com.android.support:design:25.1.1 如果不