1. 程式人生 > >Android design包自定義tablayout的底部導航欄

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

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

這裡寫圖片描述
佈局只要一個tablayout

<android.support.design.widget.TabLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/nav_tl"

        app:tabIndicatorHeight="0dp"
//將指示器去掉 ps:如果大家對tablayout有一些樣式上的需求 可以自定義style,這裡就不加了 android:layout_gravity="bottom" ></android.support.design.widget.TabLayout>

然後就是activity了

public class MainActivity extends BaseActivity implements TabLayout.OnTabSelectedListener{

    @BindView(R.id.main_container)
    LinearLayout mainContainer;
    @BindView(R.id.nav_tl)
    TabLayout navTl;
    //Tab 文字
private final int[] TAB_TITLES = new int[]{R.string.nav_home,R.string.nav_order,R.string.nav_my}; //Tab 圖片 private final int[] TAB_IMGS = new int[]{R.drawable.nav_home_bg,R.drawable.nav_order_bg,R.drawable.nav_my_bg}; //貼出一個R.drawable.nav_home_bg的檔案,其他類似:`<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true" android:drawable="@mipmap/nav_home_selected"></item> <item android:state_selected="false" android:drawable="@mipmap/nav_home_normal"></item> </selector>` private FirstPagerFragment firstPagerFragment; private PersonalFragment personalFragment; private SeekOrderFragment seekOrderFragment; private android.support.v4.app.FragmentManager manager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); iniView(); iniData(); } private void iniData() { } private void iniView() { LayoutInflater inflater = LayoutInflater.from(this); manager = getSupportFragmentManager(); getTab(R.id.main_container,manager,0); setTabs(navTl,inflater,TAB_TITLES,TAB_IMGS); navTl.setOnTabSelectedListener(this); } /** * @description: 設定新增Tab * 我們自定義的佈局customer_layout其實就是一張圖片加文字 * `<?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"> <ImageView android:id="@+id/img_tab" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" /> <TextView android:id="@+id/tv_tab" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:textColor="@drawable/tv_color_bg"//text我用了一個顏色選擇器,主要在我選中的時候能改變顏色 /> </LinearLayout>` */ private void setTabs(TabLayout tabLayout, LayoutInflater inflater, int[] tabTitlees, int[] tabImgs) { for (int i = 0; i < tabImgs.length; i++) { TabLayout.Tab tab = tabLayout.newTab(); View view = inflater.inflate(R.layout.customer_layout, null); tab.setCustomView(view); TextView tvTitle = (TextView) view.findViewById(R.id.tv_tab); tvTitle.setText(tabTitlees[i]); ImageView imgTab = (ImageView) view.findViewById(R.id.img_tab); imgTab.setImageResource(tabImgs[i]); tabLayout.addTab(tab); } } @Override public void onTabSelected(TabLayout.Tab tab) { getTab(R.id.main_container,manager,tab.getPosition()); } @Override public void onTabUnselected(TabLayout.Tab tab) { } @Override public void onTabReselected(TabLayout.Tab tab) { } //設定tab的監聽,選中某一個tab對應的Fragment要及時切換,相信大家看程式碼能看明白 private void getTab(int container, android.support.v4.app.FragmentManager manager, int position){ FragmentTransaction ft = manager.beginTransaction(); hideAll(ft); switch (position){ case 0: if(firstPagerFragment==null){ firstPagerFragment=new FirstPagerFragment(); ft.add(container,firstPagerFragment); }else { ft.show(firstPagerFragment); } break; case 1: if(seekOrderFragment==null){ seekOrderFragment=new SeekOrderFragment(); ft.add(container,seekOrderFragment); }else { ft.show(seekOrderFragment); } break; case 2: if(personalFragment==null){ personalFragment=new PersonalFragment(); ft.add(container,personalFragment); }else { ft.show(personalFragment); } break; } ft.commit(); } private void hideAll(FragmentTransaction ft) { if(firstPagerFragment!=null){ ft.hide(firstPagerFragment); } if(personalFragment!=null){ ft.hide(personalFragment); } if(seekOrderFragment!=null){ ft.hide(seekOrderFragment); } } }

相關推薦

Android design定義tablayout底部導航

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

Android安卓定義底部彈出對話方塊

努力不一定立刻會有好的結果,但一定是朝著好的方向                           ——李尚龍 《你所謂的穩定,不過是在浪費生命》

定義Tablayout——ViewPager導航控制元件_SimpleViewpagerIndicator

寫這個小控制元件是因為最近負責維護的一款app大改版,設計師給了一個新的ViewPager導航樣式,但找了幾個常用的導航控制元件發現都無法100%實現設計師給的效果,於是就乾脆自己動手豐衣足食了。 控制元件只有一個單獨的java類,程式碼也很簡單,放出來希望能幫到需要的人。

Android定義View之導航(Fragment實現)

安卓輕量級底部導航欄 目前安卓開發中常常會用到底部導航欄這個控制元件,但是自己從零開始做一個又太麻煩。因此,我封裝了一個底部導航欄,同時,也做了一些修改,用於頂部也十分合適。下面是示例圖: 使用方法: 1.新增依賴 首先,在build.gradle檔案下加入 maven

JavaScript jqGrid定義表格底部導航+定義文字搜尋框實現

本文討論jqGrid如何實現自定義底部導航,在自定義底部導航中如何實現文字框搜尋,其中涉及的jqGrid資料載入、方法擴充套件本文不再贅述。簡單起見先看個案例。 1、頁面截圖 2、頁面程式碼 <!DOCTYPE html> <html> <he

Android學習總結——輸入法將BottomNavigationBar(底部導航)頂上去的問題

andro devel google tps 底部導航 style log cti googl 在應用清單中給當前<Activity>設置: android:windowSoftInputMode="adjustPan" 關於android:windo

PyQt4定義控件----導航控件

sse ins seve 關於 導航 bsp and etc sele PyQt4中自定義導航欄控件,運行如圖所示: 代碼: 1 # -*- coding: utf-8 -*-# 2 3 #-------------------------------

定義View的導航

//自定義View類 package com.example.zdyview.View; import android.content.Context; import android.util.AttributeSet; import android.view.LayoutInflate

微信小程式之仿android fragment之可滑動的底部導航例項 —— 微信小程式實戰系列(4)

底部3-5個選項的底部導航欄,目前在移動端上是主流佈局之一 因此騰訊官方特地做了,可以通過設定,就可以做出了一個底部的導航欄 但是通過設定的這個底部的導航欄,功能上比較固定,它必須要設定與它對應的一個頁面,而且並不能滑動。 在業務上,有時候會比較限制,並不能完全滿足所需

Android之RadioGroup+ViewPager製作的底部導航

在日常開發中我們常常會用到類似微信或者QQ的底部導航。實現這樣的效果有多種,今天就為大家介紹一種實現簡單,可控性好的底部導航的實現方法。 首先建立activity_main.xml佈局檔案,裡面主要由ViewPager和RadioGroup構成。ViewPager用來存

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

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

android開發時華為手機底部導航擋住了應用佈局

原因:使用安卓的BottomNavigationView控制元件開發底部導航欄同時使用了沉浸式狀態列導致華為手機的底部導航欄會蓋住我應用的導航欄。 解決:先寫一個工具類 import android.content.Context; import android.co

定義頂端頂部導航(可配合ViewPager使用)

最近做專案,需要有類似網易新聞頂端的導航欄的ui元件,但是就是有切換動畫的那種,於是就自己動手寫了一個,看了我的文章,如果有什麼問題,歡迎大家交流哦。 實現原理:通過OnPageChangeListener的onPageScrolled()事件獲取當前頁面的偏移量,從而改

Android定義控制元件】炫酷的底部導航

https://github.com/WakeHao/NavBar 基本使用 使用這個控制元件,只需要簡單的幾部 引入該控制元件到你的專案中 compile 'com.chen.wakehao.library:bottom-navigation-bar:1.0.0'

android 定義底部導航

1.編寫佈局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+

android底部導航+viewPager+定義view的簡單實現

Ps:導航欄直接用Android Design Library,導航欄的話用TabLayout實現,是比較方便快捷的方法。以下僅供初學者學習。。。。一年後回過來看寫的比較糟糕 1首先我們要解決介面的問題,也就是先讓使用者能看到介面,再來搞定能不能用的問題是

Android筆記——定義TabLayout之title與icon

自定義TabLayout 總佈局 實現的是底端TabLayout <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="htt

Android配置build.gradle的buildTypes動態自動維護debug和release定義位變數值

Android配置build.gradle的buildTypes動態自動維護debug和release包自定義欄位變數值 在Android編譯出包階段,debug包和正式的release有時候需要作出有所區別的調整。 比如最常見的是App應用程式中Log日誌輸出開關的控制。開發者希望在deb

Android定義TabLayout指示器長度

效果圖: MainActivity.java檔案 public class MainActivity extends AppCompatActivity { @Override protected void onCreate(@Nullabl

NavigationTabBar 定義底部導航

先來頁面效果 匯入依賴 implementation 'devlight.io:navigationtabbar:1.2.5' 先建立三個Fragment ,貼出其中一個Fragment 的程式碼  fragment_home.xml <?xml vers