亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android使用BottomNavigationBar實現底部導航欄

2019-10-21 21:25:25
字體:
來源:轉載
供稿:網友

本文實例為大家分享了Android實現底部導航欄的具體代碼,供大家參考,具體內容如下

展示

MODE_FIXED+BACKGROUND_STYLE_STATIC效果

Android,BottomNavigationBar,底部導航欄

DE_FIXED+BACKGROUND_STYLE_RIPPLE效果

Android,BottomNavigationBar,底部導航欄

MODE_SHIFTING+BACKGROUND_STYLE_STATIC效果

Android,BottomNavigationBar,底部導航欄

MODE_SHIFTING+BACKGROUND_STYLE_RIPPLE效果

Android,BottomNavigationBar,底部導航欄

1在Gradle中添加

compile ‘com.ashokvarma.android:bottom-navigation-bar:0.9.5'

2布局實現

 <com.ashokvarma.bottomnavigation.BottomNavigationBar    android:layout_gravity="bottom"    android:id="@+id/bottom_navigation_bar"    android:layout_width="match_parent"    android:layout_height="wrap_content"/>

3類中Activity中添加BottomNavigationItem

BottomNavigationBar bottomNavigationBar = (BottomNavigationBar) findViewById(R.id.bottom_navigation_bar); bottomNavigationBar        .addItem(new BottomNavigationItem(R.drawable.ic_home_white_24dp, "Home"))        .addItem(new BottomNavigationItem(R.drawable.ic_book_white_24dp, "Books"))        .addItem(new BottomNavigationItem(R.drawable.ic_music_note_white_24dp, "Music"))        .addItem(new BottomNavigationItem(R.drawable.ic_tv_white_24dp, "Movies & TV"))        .addItem(new BottomNavigationItem(R.drawable.ic_videogame_asset_white_24dp, "Games"))        .initialise();

4設置事件監聽器TabChangeListener

 bottomNavigationBar.setTabSelectedListener(new BottomNavigationBar.OnTabSelectedListener(){      @Override      public void onTabSelected(int position) {      }      @Override      public void onTabUnselected(int position) {]      }      @Override      public void onTabReselected(int position) {      }    });

5.代碼實現

package com.android.xiaobai;  import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.support.v7.app.AppCompatActivity; import android.util.Log;  import com.ashokvarma.bottomnavigation.BottomNavigationBar; import com.ashokvarma.bottomnavigation.BottomNavigationItem;  import java.util.ArrayList;  import fragment.ContactsFragment; import fragment.DongtaiFragment; import fragment.MsgFragment;  /**  * Created by xiaobai on 2018/1/31/031.  */  public class MessageActivity extends AppCompatActivity implements BottomNavigationBar.OnTabSelectedListener {   private ArrayList<Fragment> fragments;   private BottomNavigationBar bottomNavigationBar;   private MsgFragment msgFragment;   private ContactsFragment contactsFragment;   private DongtaiFragment dongtaiFragment;   private FragmentManager fragmentManager;   private FragmentTransaction transaction;   int lastSelectedPosition = 0;    @Override   protected void onCreate(@Nullable Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.activty_message);      bottomNavigationBar = findViewById(R.id.bottom_navigation_bar);     init();   }    private void init() {     //要先設計模式后再添加圖標!     //設置按鈕模式 MODE_FIXED表示固定  MODE_SHIFTING表示轉移     bottomNavigationBar.setMode(BottomNavigationBar.MODE_FIXED);     //設置背景風格     // BACKGROUND_STYLE_STATIC表示靜態的     //BACKGROUND_STYLE_RIPPLE表示漣漪的,也就是可以變化的 ,跟隨setActiveColor里面的顏色變化     bottomNavigationBar.setBackgroundStyle(BottomNavigationBar.BACKGROUND_STYLE_RIPPLE);     //添加并設置圖標、圖標的顏色和文字     bottomNavigationBar         .addItem(new BottomNavigationItem(R.drawable.im_botton_message, "消息")).setActiveColor(R.color.blue)         .addItem(new BottomNavigationItem(R.drawable.im_botton_contacts, "聯系人")).setActiveColor(R.color.red)         .addItem(new BottomNavigationItem(R.drawable.im_botton_dongtai, "動態")).setActiveColor(R.color.orign)         .setFirstSelectedPosition(lastSelectedPosition )         .initialise();      bottomNavigationBar.setTabSelectedListener(this);     setDefaultFragment();   }    //設置初始界面   private void setDefaultFragment() {     fragmentManager = getSupportFragmentManager();     transaction = fragmentManager.beginTransaction();     transaction.replace(R.id.layFrame, MsgFragment.newInstance("消息"));     transaction.commit();   }    @Override   public void onTabSelected(int position) {     fragmentManager = getSupportFragmentManager();     transaction = fragmentManager.beginTransaction();     switch (position) {       case 0:         if (msgFragment == null) {           msgFragment = MsgFragment.newInstance("消息");         }         transaction.replace(R.id.layFrame, msgFragment);         break;       case 1:         if (contactsFragment == null) {           contactsFragment = ContactsFragment.newInstance("聯系人");         }         transaction.replace(R.id.layFrame, contactsFragment);         break;       case 2:         if (dongtaiFragment == null) {           dongtaiFragment = DongtaiFragment.newInstance("動態");         }         transaction.replace(R.id.layFrame, dongtaiFragment);         break;       default:         break;     }     // 事務提交     transaction.commit();   }    @Override   public void onTabUnselected(int position) {     Log.d("dongtaiFragment", "onTabUnselected() called with: " + "position = [" + position + "]");   }    @Override   public void onTabReselected(int position) {    } } 
package fragment;  import android.os.Bundle; import android.support.annotation.Nullable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView;  import com.android.xiaobai.R;  /**  * Created by xiaobai on 2018/1/31/031.  */  public class MsgFragment extends BaseFragment {   /**    * 標志位,標志已經初始化完成    */   private boolean isPrepared;   /**    * 是否已被加載過一次,第二次就不再去請求數據了    */   private boolean mHasLoadedOnce;   TextView textView;   @Nullable   @Override   public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {     if (mView == null) {       // 需要inflate一個布局文件 填充Fragment       mView = inflater.inflate(R.layout.fragment_msg, container, false);       initView();       isPrepared = true; //    實現懶加載       lazyLoad();     }     //緩存的mView需要判斷是否已經被加過parent, 如果有parent需要從parent刪除,要不然會發生這個mView已經有parent的錯誤。     ViewGroup parent = (ViewGroup) mView.getParent();     if (parent != null) {       parent.removeView(mView);     }      return mView;   }   /**    * 初始化控件    */   private void initView() {    }    @Override   public void lazyLoad() {     if (!isPrepared || !isVisible || mHasLoadedOnce) {       return;     }     //填充各控件的數據     mHasLoadedOnce = true;   }   public static MsgFragment newInstance(String param1) {     MsgFragment fragment = new MsgFragment();     Bundle args = new Bundle();     args.putString("agrs1", param1);     fragment.setArguments(args);     return fragment;   } } 
<?xml version="1.0" encoding="utf-8"?> <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"   android:orientation="vertical"   tools:context=".MessageActivity">    <FrameLayout     android:id="@+id/layFrame"     android:layout_width="match_parent"     android:layout_height="0dp"     android:layout_weight="1" />    <com.ashokvarma.bottomnavigation.BottomNavigationBar     android:id="@+id/bottom_navigation_bar"     android:layout_width="match_parent"     android:layout_height="wrap_content"     android:layout_gravity="bottom" /> </LinearLayout> 
package fragment;  import android.support.v4.app.Fragment; import android.view.View;   /**  * Created by xiaobai on 2018/1/31/031.  */  public abstract class BaseFragment extends Fragment {   /**    * Fragment當前狀態是否可見    */   public boolean isVisible;    /**    * inflate布局文件 返回的view    */   public View mView;    /**    * 簡化 findViewById    *    * @param viewId    * @param <T>    * @return    */   protected <T extends View> T find(int viewId) {     return (T) mView.findViewById(viewId);   }    /**    * setUserVisibleHint是在onCreateView之前調用的    * 設置Fragment可見狀態    */   @Override   public void setUserVisibleHint(boolean isVisibleToUser) {     super.setUserVisibleHint(isVisibleToUser);     /**      * 判斷是否可見      */     if (getUserVisibleHint()) {       isVisible = true;       onVisible();     } else {       isVisible = false;       onInvisible();     }   }    /**    * 可見    */   private void onVisible() {     lazyLoad();   }    /**    * 不可見    */   private void onInvisible() {   }    /**    * 延遲加載    * 子類必須重寫此方法    */   public abstract void lazyLoad(); } 

BottomNavigationBar 圖標和文字的間距:

在自己項目里value文件夾中的dimens.xml里面復寫fixed_height_bottom_padding(默認是10dp,值越小,間距越大。適合的模式是BottomNavigationBar.MODE_FIXED)

Android,BottomNavigationBar,底部導航欄

如果模式是BottomNavigationBar.MODE_SHIFTING也是一樣,復寫和修改相關的參數

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
色悠悠国产精品| 久久视频在线免费观看| 国产精品6699| 欧美一区二区三区图| 亚洲福利在线看| 精品国产999| 欧美日韩国产精品专区| 久久久亚洲国产| 久久久久久久久久久久久久久久久久av| 精品无人国产偷自产在线| 欧美极度另类性三渗透| 91高清视频免费| 久久五月天色综合| 国产精品视频大全| 久久精品国产亚洲| 亚洲精品98久久久久久中文字幕| 精品国产乱码久久久久久虫虫漫画| 午夜精品久久久久久久白皮肤| 国内外成人免费激情在线视频网站| 亚洲欧美国产一区二区三区| 亚洲自拍小视频免费观看| 久久人人爽亚洲精品天堂| 欧美日韩在线视频一区| 国产精品久久久久久久久久久久| 国产一区二区三区在线免费观看| 国内偷自视频区视频综合| 亚洲免费视频观看| 国产噜噜噜噜噜久久久久久久久| 国产精品久久婷婷六月丁香| 96pao国产成视频永久免费| 成人国产精品久久久久久亚洲| 欧美亚洲成人免费| 中文字幕av一区中文字幕天堂| 日韩av在线网址| 久久久久久国产三级电影| 亚洲天堂男人的天堂| 综合136福利视频在线| 欧美日韩中文字幕在线视频| 成人免费淫片aa视频免费| 92版电视剧仙鹤神针在线观看| 在线视频中文亚洲| 国产精品美女www爽爽爽视频| www.国产精品一二区| 色综合视频一区中文字幕| 98精品国产自产在线观看| 国产精品扒开腿做| 欧美成人午夜激情视频| 日韩精品视频免费在线观看| 姬川优奈aav一区二区| 精品亚洲一区二区三区| 国内精品久久久久久中文字幕| 国产精品专区h在线观看| 高跟丝袜一区二区三区| 永久免费精品影视网站| 欧美激情性做爰免费视频| 亚洲男人的天堂在线| 成人网在线视频| 国产精品一区二区av影院萌芽| 欧美在线视频一区| 久久综合久中文字幕青草| 国产精品极品美女在线观看免费| 国产a级全部精品| 欧美性感美女h网站在线观看免费| 精品亚洲一区二区三区| 奇米4444一区二区三区| 日韩网站免费观看高清| 欧美日韩一区二区在线| 欧美黑人xxxⅹ高潮交| 色播久久人人爽人人爽人人片视av| 午夜精品久久久久久99热软件| 欧美另类极品videosbestfree| 欧美xxxx做受欧美| 日韩欧中文字幕| 欧美国产日韩xxxxx| 亚洲xxxx18| 中文字幕国产亚洲2019| 欧洲成人在线观看| 91精品在线影院| 色噜噜狠狠狠综合曰曰曰| 亚洲成色www8888| 国产精品无av码在线观看| 午夜精品一区二区三区在线视| 欧美精品18videos性欧美| 日韩电影大全免费观看2023年上| 国产日本欧美在线观看| 高清在线视频日韩欧美| 欧美又大粗又爽又黄大片视频| 日韩在线观看免费高清| 欧美夫妻性生活xx| 日日噜噜噜夜夜爽亚洲精品| 国产精品一区二区久久| 久久天天躁狠狠躁夜夜躁2014| 国产亚洲一级高清| 国产精品91免费在线| 在线日韩av观看| 欧美在线免费观看| 日本在线精品视频| 国产精品久久久久国产a级| 欧美视频专区一二在线观看| 日韩激情在线视频| 亚洲va码欧洲m码| 国产精品三级美女白浆呻吟| 欧美成人免费大片| 正在播放欧美一区| 国产精品自拍偷拍| 日韩亚洲欧美中文在线| 2020欧美日韩在线视频| 国产精品视频导航| 亚洲一区中文字幕| 国产一区视频在线| 国产精品综合网站| 丝袜一区二区三区| 91av在线播放视频| 性色av一区二区三区在线观看| 国产亚洲精品va在线观看| 亚洲精品免费网站| 日本韩国欧美精品大片卡二| 久久久国产一区| 亚洲高清色综合| 国产精品视频免费观看www| 国产亚洲一级高清| 日本国产欧美一区二区三区| 午夜精品一区二区三区在线视| 日韩欧美国产视频| 日韩高清免费观看| 成人午夜高潮视频| 亚洲国产欧美久久| 欧美日韩综合视频网址| 亚洲国产精品女人久久久| 国产精品国内视频| 黑人巨大精品欧美一区二区| 亚洲视频777| 亚洲精品在线视频| 国产一区二区丝袜| 色综合天天综合网国产成人网| 在线日韩欧美视频| 91丝袜美腿美女视频网站| 国产精品va在线播放我和闺蜜| 久久99精品国产99久久6尤物| 国产精品国产三级国产aⅴ浪潮| 91精品中国老女人| 国产69精品久久久久9999| 欧美精品在线免费| 午夜精品一区二区三区在线| 欧美午夜片在线免费观看| 岛国av一区二区在线在线观看| 欧美成人免费网| 久久影院资源网| 国产一区香蕉久久| 亚洲第一福利在线观看| 亚洲最大av网| 成人激情免费在线| 在线视频欧美日韩| 国产精品视频网址| 欧洲成人在线视频| 毛片精品免费在线观看| 国产欧美精品久久久| 国产精品盗摄久久久| 精品国产一区二区三区久久| 日韩在线激情视频| 日韩精品在线观看视频| 九九综合九九综合| 久久久久久久亚洲精品| 国语自产偷拍精品视频偷|