Android底部导航栏实现(三)之TextView+LinearLayout

这里简单记录下通过TextView+LinearLayout+Fragment来实现Android底部导航栏。

布局


  1. <!--fragment_text_tab.xml--> 
  2.  
  3. <?xml version="1.0" encoding="utf-8"?> 
  4. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  5.               android:layout_width="match_parent" 
  6.               android:layout_height="match_parent" 
  7.               android:orientation="vertical"> 
  8.  
  9.     <FrameLayout 
  10.         android:id="@+id/sub_content" 
  11.         android:layout_width="match_parent" 
  12.         android:layout_height="0dp" 
  13.         android:layout_weight="1"> 
  14.  
  15.         <TextView 
  16.             android:id="@+id/activity_text_view" 
  17.             android:layout_width="wrap_content" 
  18.             android:layout_height="wrap_content" 
  19.             android:layout_centerHorizontal="true" 
  20.             android:text="@string/tips" 
  21.             android:textColor="@color/colorPrimary" 
  22.             android:textSize="18sp" 
  23.             android:textStyle="bold|italic"/> 
  24.     </FrameLayout> 
  25.  
  26.     <View 
  27.         android:layout_width="match_parent" 
  28.         android:layout_height="1px" 
  29.         android:background="@color/grey_300"/> 
  30.  
  31.     <include layout="@layout/tab_layout_for_bottom"/> 
  32.  
  33. </LinearLayout> 
  34.  
  35.  
  36.  
  37. <!--tab_layout_for_bottom--> 
  38.  
  39. <?xml version="1.0" encoding="utf-8"?> 
  40.  
  41.  
  42. <LinearLayout 
  43.     xmlns:android="http://schemas.android.com/apk/res/android" 
  44.     xmlns:tools="http://schemas.android.com/tools" 
  45.     android:layout_width="match_parent" 
  46.     android:layout_height="56dp" 
  47.     android:background="@color/white" 
  48.     android:orientation="horizontal" 
  49.     tools:showIn="@layout/fragment_text_tab"> 
  50.  
  51.     <TextView 
  52.         android:id="@+id/tv_home" 
  53.         style="@style/viewpager_navigation_bar_tab_style" 
  54.         android:drawableTop="@drawable/home" 
  55.         android:text="@string/item_home"/> 
  56.  
  57.     <TextView 
  58.         android:id="@+id/tv_location" 
  59.         style="@style/viewpager_navigation_bar_tab_style" 
  60.         android:drawableTop="@drawable/location" 
  61.         android:text="@string/item_location"/> 
  62.  
  63.     <TextView 
  64.         android:id="@+id/tv_like" 
  65.         style="@style/viewpager_navigation_bar_tab_style" 
  66.         android:drawableTop="@drawable/like" 
  67.         android:text="@string/item_like"/> 
  68.  
  69.     <TextView 
  70.         android:id="@+id/tv_person" 
  71.         style="@style/viewpager_navigation_bar_tab_style" 
  72.         android:drawableTop="@drawable/person" 
  73.         android:text="@string/item_person"/> 
  74. </LinearLayout> 

代码


  1. mTHome.setOnClickListener(this); 
  2.     mTLocation.setOnClickListener(this); 
  3.     mTLike.setOnClickListener(this); 
  4.     mTMe.setOnClickListener(this); 
  5.     setDefaultFragment();//设置默认显示Fragment 
  6.          
  7.     @Override 
  8.     public void onClick(View view) { 
  9.         resetTabState();//reset the tab state 
  10.         switch (view.getId()) { 
  11.             case R.id.tv_home: 
  12.                 setTabState(mTHome, R.drawable.home_fill, getColor(R.color.colorPrimary));//设置Tab状态 
  13.                 switchFrgment(0);//切换Fragment 
  14.                 break; 
  15.             case R.id.tv_location: 
  16.                 setTabState(mTLocation, R.drawable.location_fill, getColor(R.color.colorPrimary)); 
  17.                 switchFrgment(1); 
  18.                 break; 
  19.             case R.id.tv_like: 
  20.                 setTabState(mTLike, R.drawable.like_fill, getColor(R.color.colorPrimary)); 
  21.                 switchFrgment(2); 
  22.                 break; 
  23.             case R.id.tv_person: 
  24.                 setTabState(mTMe, R.drawable.person_fill, getColor(R.color.colorPrimary)); 
  25.                 switchFrgment(3); 
  26.                 break; 
  27.         } 
  28.     }  

Fragment的切换


  1. /** 
  2.      * switch the fragment accordting to id 
  3.      * @param i id 
  4.      */ 
  5.     private void switchFrgment(int i) { 
  6.         FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); 
  7.         switch (i) { 
  8.             case 0: 
  9.                 if (mHomeFragment == null) { 
  10.                     mHomeFragment = mHomeFragment.newInstance(getString(R.string.item_home)); 
  11.                 } 
  12.                 transaction.replace(R.id.sub_content, mHomeFragment); 
  13.                 break; 
  14.             case 1: 
  15.                 if (mLocationFragment == null) { 
  16.                     mLocationFragment = LocationFragment.newInstance(getString(R.string.item_location)); 
  17.                 } 
  18.                 transaction.replace(R.id.sub_content, mLocationFragment); 
  19.                 break; 
  20.             case 2: 
  21.                 if (mLikeFragment == null) { 
  22.                     mLikeFragment = LikeFragment.newInstance(getString(R.string.item_like)); 
  23.                 } 
  24.                 transaction.replace(R.id.sub_content, mLikeFragment); 
  25.                 break; 
  26.             case 3: 
  27.                 if (mPersonFragment == null) { 
  28.                     mPersonFragment = PersonFragment.newInstance(getString(R.string.item_person)); 
  29.                 } 
  30.                 transaction.replace(R.id.sub_content, mPersonFragment); 
  31.                 break; 
  32.         } 
  33.         transaction.commit(); 
  34.     }  

这里面值得注意的地方就是要用getChildFragmentManager(),否则会出现切换Fragment内容不显示的情况。

设置Tab状态


  1. /** 
  2.      * set the tab state of bottom navigation bar 
  3.      * 
  4.      * @param textView the text to be shown 
  5.      * @param image    the image 
  6.      * @param color    the text color 
  7.      */ 
  8.     private void setTabState(TextView textView, int image, int color) { 
  9.         textView.setCompoundDrawablesRelativeWithIntrinsicBounds(0, image, 0, 0);//Call requires API level 17 
  10.         textView.setTextColor(color); 
  11.     } 
  12.  
  13.  
  14.  
  15.     /** 
  16.      * revert the image color and text color to black 
  17.      */ 
  18.     private void resetTabState() { 
  19.         setTabState(mTHome, R.drawable.home, getColor(R.color.black_1)); 
  20.         setTabState(mTLocation, R.drawable.location, getColor(R.color.black_1)); 
  21.         setTabState(mTLike, R.drawable.like, getColor(R.color.black_1)); 
  22.         setTabState(mTMe, R.drawable.person, getColor(R.color.black_1)); 
  23.  
  24.     }  

说明:这几篇文章没有过多的文字叙述,因为这些东西也不是很难,而且都是常用的,相信很多人都了如指掌了,多说亦是废话,直接上代码看的反而更清楚。

作者:K_J

来源:51CTO

时间: 2024-10-26 05:47:44

Android底部导航栏实现(三)之TextView+LinearLayout的相关文章

Android底部导航栏实现(四)之TabLayout+ViewPager

这里简单记录一下通过TabLayout+ViewPager来实现Android底部导航栏.   布局 <?xml version="1.0" encoding="utf-8"?>  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"                  xmlns:app="http://schemas.an

Android底部导航栏实现(二)之RadioGroup

这里简单记录一下Android底部导航栏通过RadioGroup+Fragment的实现. 布局: <?xml version="1.0" encoding="utf-8"?>  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"                  android:layout_width="match_p

android 导航栏-新手请教android底部导航栏问题

问题描述 新手请教android底部导航栏问题 andriod底部导航栏每当移到第一个时就报错,出现空指针异常,希望哪位大神能指教一下,到底哪错了 错误信息: 09-29 22:09:21.098: E/AndroidRuntime(863): java.lang.NullPointerException 09-29 22:09:21.098: E/AndroidRuntime(863): at com.example.producer.MainActivity$MyOnPageChangeLi

Android底部导航栏实现(一)之BottomNavigationBar

BottomNavigationBar这个控件的使用之前已经写过,这里不再赘述,详情请参考BottomNavigationBar的使用. 下面直接上代码: 初始化及相关设置: mBottomNavigationBar = (BottomNavigationBar) view.findViewById(R.id.bottom_navigation_bar);  mBottomNavigationBar.setBackgroundStyle(BottomNavigationBar.BACKGROUN

Android程序开发之Fragment实现底部导航栏实例代码_Android

流行的应用的导航一般分为两种,一种是底部导航,一种是侧边栏. 说明 IDE:AS,Android studio; 模拟器:genymotion; 实现的效果,见下图. 具体实现 为了讲明白这个实现过程,我们贴出来的代码多一写,这样更方便理解 [最后还会放出完整的代码实现] .看上图的界面做的比较粗糙,但实现过程的骨架都具有了,想要更完美的设计,之后自行完善吧 ^0^. 布局 通过观察上述效果图,发现任意一个选项页面都有三部分组成: 顶部去除ActionBar后的标题栏: 中间一个Fragment

Android 底部导航控件实例代码_Android

一.先给大家展示下最终效果 通过以上可以看到,图一是简单的使用,图二.图三中为结合ViewPager共同使用,而且都可以随ViewPager的滑动渐变色,不同点是图二为选中非选中两张图片,图三的选中非选中是一张图片只是做了颜色变化. 二. 需求 我们希望做可以做成这样的,可以在xml布局中引入控件并绑定数据,在代码中设置监听回调,并且配置使用要非常简单! 三.需求分析 根据我们多年做不明确需求项目的经验,以上需求还算明确.那么我们可以采用在LinearLayout添加子View控件,这个子Vie

三步搞定android应用底部导航栏

很多android应用底部都有一个底部导航栏,方便用户在使用过程中随意切换.目前常用的做法有三种:一种是使用自定义tabHost,一种是使用activityGroup,一种是结合FrameLayout实现.笔者再做了多款应用后,为了节约开发周期,封装了一个抽象类,只要三步便可完成底部栏的生成及不同页面的调用. public class ActivitycollectiondemoActivity extends ActivityCollection { /** Called when the a

TextView+Fragment实现底部导航栏

前言:项目第二版刚上线没多久,产品又对需求进行了大改动,以前用的是左滑菜单,现在又要换成底部导航栏,于是今天又苦逼加班了.花了几个小时实现了一个底部导航栏的demo,然后总结一下.写一篇博客.供自己以后参考.也可以给没有做过的朋友进行参考.以后大家有类似的功能就可以在我的demo上就行修改. 一.先上效果图:   本来是打算用FragmentTabHost实现的,但是中间那个按钮有点麻烦,想到我们项目好几个产品经理,并且经常改需求,于是最后决定  用 TextView+Fragment去实现. 

Android程序开发之Fragment实现底部导航栏实例代码

流行的应用的导航一般分为两种,一种是底部导航,一种是侧边栏. 说明 IDE:AS,Android studio; 模拟器:genymotion; 实现的效果,见下图. 具体实现 为了讲明白这个实现过程,我们贴出来的代码多一写,这样更方便理解 [最后还会放出完整的代码实现] .看上图的界面做的比较粗糙,但实现过程的骨架都具有了,想要更完美的设计,之后自行完善吧 ^0^. 布局 通过观察上述效果图,发现任意一个选项页面都有三部分组成: 顶部去除ActionBar后的标题栏: 中间一个Fragment