1. 程式人生 > >簡單的自定義BottomBar-仿微信底部導航欄

簡單的自定義BottomBar-仿微信底部導航欄

今天寫一個簡單的自定義的BottomBar。

圖片文字都是比較隨意的,具體實現中自己可以修改。下面是實現圖:


首先我們現在佈局中把想要顯示的整個介面的基本佈局搭建成功。(其實主要在於設定你的Tab。 如果專案中用到Bootmbar的地方比較多 或者是你想複用性高一點的話 其實底部的Tab 的view 完全可以自定義。好處就是可以靈活實現tab的增減,複用行比較好)。

 <FrameLayout
        android:id="@+id/my_content"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1" >
    </FrameLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <LinearLayout
            android:id="@+id/ly1"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:gravity="center_horizontal"
            android:orientation="vertical" >

            <ImageView
                android:id="@+id/img1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />

            <TextView
                android:id="@+id/tv1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
        </LinearLayout>

        <LinearLayout
            android:id="@+id/ly2"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:gravity="center_horizontal"
            android:orientation="vertical" >

            <ImageView
                android:id="@+id/img2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />

            <TextView
                android:id="@+id/tv2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
        </LinearLayout>

        <LinearLayout
            android:id="@+id/ly3"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:gravity="center_horizontal"
            android:orientation="vertical" >

            <ImageView
                android:id="@+id/img3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />

            <TextView
                android:id="@+id/tv3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
        </LinearLayout>

        <LinearLayout
            android:id="@+id/ly4"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:gravity="center_horizontal"
            android:orientation="vertical" >

            <ImageView
                android:id="@+id/img4"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />

            <TextView
                android:id="@+id/tv4"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
        </LinearLayout>
    </LinearLayout>
在設定好佈局之後,需要在Fragment中設定我們需要切換的Fragment:
 private void initFragment() {
    Fragment1 fragment1 = new Fragment1();
    Fragment2 fragment2 = new Fragment2();
    Fragment3 fragment3 = new Fragment3();
    Fragment4 fragment4 = new Fragment4();
    
    fragmentList.add(fragment1);
    fragmentList.add(fragment2);
    fragmentList.add(fragment3);
    fragmentList.add(fragment4);
    
    FragmentTransaction transaction = getFragmentManager().beginTransaction();
    transaction.add(R.id.my_content, fragment1).commit();
    index = 0; //tab最後一次點選的位置
  }



因為是Demo,故用的Fragment 的name 不夠專業,Fragment1-Fragment4中可以實現自己的具體邏輯,這裡這是讓他顯示背景和文字 故不再貼出程式碼。

然後給不同的tab設定點選事件,點選事件中可以實現Fragment的切換和Tab樣式的變化(比如過文字顏色和圖片的改變的等)。

Fragment切換的具體程式碼:

 private void switchFragment(int position) {
    if (position == index) {
      return;
    }
    
    if(null == fragmentList || 0 == fragmentList.size()) {
      return;
    }
    
    FragmentTransaction transaction = getFragmentManager().beginTransaction();
    transaction.hide(fragmentList.get(index));
    if (!fragmentList.get(position).isAdded()) {
      transaction.add(R.id.my_content, fragmentList.get(position)).show(fragmentList.get(position));
    }
    else {
      transaction.show(fragmentList.get(position));
    }
    transaction.commit();
    index = position;
  }



然後簡單的BottomBar就實現了。因為是簡易的Demo 故很多地方都沒進行封裝。我們完全可以把Fragment的切換 ,Fragment List的定義和tab的樣式、數目的方法實現封裝,子類繼承Base類之後,實現Fragment List方法和Tab樣式方法即可。時間原因,不再進行封裝。


上面是我的微信公共號 每天都會給大家分享最新的知識點,歡迎大家的加入


最近一段時間對程式碼進行了封裝  點選下載Demo


相關推薦

簡單定義BottomBar-仿底部導航

今天寫一個簡單的自定義的BottomBar。 圖片文字都是比較隨意的,具體實現中自己可以修改。下面是實現圖: 首先我們現在佈局中把想要顯示的整個介面的基本佈局搭建成功。(其實主要在於設定你的Tab。 如果專案中用到Bootmbar的地方比較多 或者是你想複用性高一點的話

Android專案導航仿底部導航TabLayout+ViewPager+Fragment

一、實現效果: 二、依賴jar包: compile 'com.android.support:design:24+'三、專案工程結構: 四、XML佈局 activity_main.xml佈局: <?xml version="1.0" encoding="u

Android仿底部選單+今日頭條頂部導航

背景 Android應用幾乎都會用到底部選單欄,在Material Design還沒有出來之前,TabHost等技術一直佔主流,現在Google新sdk中提供了TabLayout類可以便捷的做出底部選單欄效果。 本節我們實現兩種主要的Tab效果: 仿微信底部選

Android仿底部選單+頂部選單

        本文要實現仿微信微信底部選單欄+頂部選單欄,採用ViewPage來做,每一個page對應一個XML,當手指在ViewPage左右滑動時,就相應顯示不同的page(其實就是xml)並且同時改變底部選單按鈕的圖片變暗或變亮,同時如果點選底部選單按鈕,左

隱藏底部導航

<script>document.addEventListener('WeixinJSBridgeReady', function onBridgeReady() {WeixinJSBridge.call('hideToolbar');});</script> 

html css 仿底部定義選單

         最近幾個月一直從事微信開發,從剛開始的懵懂漸漸成長了一點。今天覺得微信底部自定義選單,如果能在html的頁面上也能顯示就好了. 記得以前看過某個網頁有類似效果.查找了該網頁的css.  ok現在html css 實現微信自定義選單效果. 不多說直接上程式碼

【Android 仿通訊錄 導航分組列表-下】定義View為RecyclerView打造右側索引導航IndexBar

本篇文章已授權微信公眾號 guolin_blog (郭霖)獨家釋出 一 概述 在上篇文章(http://blog.csdn.net/zxt0601/article/details/52355199)裡,我們用ItemDecoration為Recy

企業嵌入定義專案(useId校驗登陸使用者合法性)

好久沒有寫部落格了,最近有一點小收穫,來記錄一下。免的以後使用的時候又找不到。 最近,公司需要用企業微信整合內部專案。原本以為是另外一個大神的事,結果落到我頭上了。慚愧花費了兩天時間,哎。。。 博主在這裡走了不少彎路。在這建議大家,儘量能閱讀官方文件再入手。我百度攻略耗費半天時間,然而收穫甚微。 好了,

button元件、 onShareAppMessage 方法實現 —— 定義傳參 —— 小程式

有時候自定義分享按鈕——需要傳參,可是小程式的button元件,並不支援傳參, 這個時候,我們可以在button上,自定義傳參,格式如下: data-屬性名 = " {{ 引數 }} "   然後在onShareAppMessage方法中,可以接收到引數,並打印出

Pythpn整合itchat定時傳送定義訊息到

完整程式碼如下: import itchat import time from apscheduler.schedulers.blocking import BlockingScheduler # 登陸,enableCmdQR 值為true 或 負數 為負數的原因有的手機無法識別二維碼,

android 定義ListView顯示聊天好友列表

我們使用listView實現顯示微信好友列表,如下圖所示 這是MainActivity的程式碼如下: <span style="font-size:18px;">package com.listviewdodo; import java.util.Arr

小程式之定義toast例項 —— 小程式實戰系列(6)

微信提供了一個toast的api  wx.showToast() 本來是比較好的,方便使用,但是這個toast會顯示出圖示,而且不能去除。 假設:我們執行完業務的時候,toast一下,當執行成功的

[GitHub開源]Android定義View實現打飛機遊戲

之前寫了很多自定義View理論方面的文章,具體可以參見《Android中自定義View、ViewGroup理論基礎詳解》 。 理論指導實踐,本博文演示瞭如何通過自定義View實現微信打飛機遊戲。 全

定義View實現主頁漸變效果

直入主題,先看圖 下面看實現原理: 1.先是佈局檔案 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.andro

Android仿底部實現Tab選項卡切換效果

在網上看了比較多的關於Tab的教程,發現都很雜亂。比較多的用法是用TitlePagerTabStrip和ViewPaper。不過TitlePagerTabStrip有個很大的缺陷,Tab裡面的內容剛進去是沒有的,要滑一次才能加載出來。而且滑動的時候,Tab裡面的內容位置

底部導航漸變效果-----viewpager&PorterDuffXfermode

實現這個功能主要涉及的知識點有 ViewPagerPorterDuffXfermode自定義檢視ViewPager 關於ViewPager需要注意的知識主要是OnPageChangeListener,該介面的三個方法如下 public abstract void onPa

Kotlin實現仿知乎底部導航顯示隱藏效果Behavior

        最開始遇見這個問題我的第一想法是給recyclerview新增滑動監聽,然後再給底部導航新增顯示隱藏動畫,可是這麼做很不優雅,一旦recyclerview不止一個就需要給每個都新增一遍監聽(雖然同樣的程式碼cv就行了),這絕不是一個優秀程式設計師的追求。所以就

Android仿小米商城底部導航之二(BottomNavigationBar、ViewPager和Fragment的聯動使用)

簡介 在前文《Android仿小米商城底部導航欄(基於BottomNavigationBar)》我們使用BottomNavigationBar控制元件模仿實現了小米商城底部導航欄效果。接下來更進一步的,我們將通過BottomNavigationBar控制元件和

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

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

小程序定義單頁面、全局導航的實現代碼

增加 -h 兩種 margin 小時 etc 詳細 100% 目前 需求 產品說小程序返回到首頁不太方便,想添加返回首頁按鈕,UI說導航欄能不能設置背景圖片,因為那樣設計挺好看的。 需求分析並制定方案 這產品和UI都提需求了,咱也不能反駁哈,所以開始調研,分析可行