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

布局

<?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">    <FrameLayout        android:id="@+id/sub_content"        android:layout_width="match_parent"        android:layout_height="0dp"        android:layout_weight="1">        <TextView            android:id="@+id/activity_text_view"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_centerHorizontal="true"            android:text="@string/tips"            android:textColor="@color/colorPrimary"            android:textSize="18sp"            android:textStyle="bold|italic"/>    FrameLayout>    <View        android:layout_width="match_parent"        android:layout_height="1px"        android:background="@color/grey_300"/>    <include layout="@layout/tab_layout_for_bottom"/>LinearLayout><?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="56dp"    android:background="@color/white"    android:orientation="horizontal"    tools:showIn="@layout/fragment_text_tab">    <TextView        android:id="@+id/tv_home"        style="@style/viewpager_navigation_bar_tab_style"        android:drawableTop="@drawable/home"        android:text="@string/item_home"/>    <TextView        android:id="@+id/tv_location"        style="@style/viewpager_navigation_bar_tab_style"        android:drawableTop="@drawable/location"        android:text="@string/item_location"/>    <TextView        android:id="@+id/tv_like"        style="@style/viewpager_navigation_bar_tab_style"        android:drawableTop="@drawable/like"        android:text="@string/item_like"/>    <TextView        android:id="@+id/tv_person"        style="@style/viewpager_navigation_bar_tab_style"        android:drawableTop="@drawable/person"        android:text="@string/item_person"/>LinearLayout>

代码

    mTHome.setOnClickListener(this);    mTLocation.setOnClickListener(this);    mTLike.setOnClickListener(this);    mTMe.setOnClickListener(this);    setDefaultFragment();//设置默认显示Fragment    @Override    public void onClick(View view) {        resetTabState();//reset the tab state        switch (view.getId()) {            case R.id.tv_home:                setTabState(mTHome, R.drawable.home_fill, getColor(R.color.colorPrimary));//设置Tab状态                switchFrgment(0);//切换Fragment                break;            case R.id.tv_location:                setTabState(mTLocation, R.drawable.location_fill, getColor(R.color.colorPrimary));                switchFrgment(1);                break;            case R.id.tv_like:                setTabState(mTLike, R.drawable.like_fill, getColor(R.color.colorPrimary));                switchFrgment(2);                break;            case R.id.tv_person:                setTabState(mTMe, R.drawable.person_fill, getColor(R.color.colorPrimary));                switchFrgment(3);                break;        }    }

Fragment的切换

    /**     * switch the fragment accordting to id     * @param i id     */    private void switchFrgment(int i) {        FragmentTransaction transaction = getChildFragmentManager().beginTransaction();        switch (i) {            case 0:                if (mHomeFragment == null) {                    mHomeFragment = mHomeFragment.newInstance(getString(R.string.item_home));                }                transaction.replace(R.id.sub_content, mHomeFragment);                break;            case 1:                if (mLocationFragment == null) {                    mLocationFragment = LocationFragment.newInstance(getString(R.string.item_location));                }                transaction.replace(R.id.sub_content, mLocationFragment);                break;            case 2:                if (mLikeFragment == null) {                    mLikeFragment = LikeFragment.newInstance(getString(R.string.item_like));                }                transaction.replace(R.id.sub_content, mLikeFragment);                break;            case 3:                if (mPersonFragment == null) {                    mPersonFragment = PersonFragment.newInstance(getString(R.string.item_person));                }                transaction.replace(R.id.sub_content, mPersonFragment);                break;        }        transaction.commit();    }

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

设置Tab状态

    /**     * set the tab state of bottom navigation bar     *     * @param textView the text to be shown     * @param image    the image     * @param color    the text color     */    private void setTabState(TextView textView, int image, int color) {        textView.setCompoundDrawablesRelativeWithIntrinsicBounds(0, image, 0, 0);//Call requires API level 17        textView.setTextColor(color);    }    /**     * revert the image color and text color to black     */    private void resetTabState() {        setTabState(mTHome, R.drawable.home, getColor(R.color.black_1));        setTabState(mTLocation, R.drawable.location, getColor(R.color.black_1));        setTabState(mTLike, R.drawable.like, getColor(R.color.black_1));        setTabState(mTMe, R.drawable.person, getColor(R.color.black_1));    }

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

DownLoad Demo

DownLoad Demo(github)

更多相关文章

  1. Android中设置关键字高亮的方法
  2. Android修行之路——Dialog
  3. android 获取 imei号码
  4. Android内存使用情况的应用实例
  5. android 获取 imei号码
  6. 【Android】App界面与顶部状态栏重叠遮盖问题
  7. android 获取 imei号码
  8. android 修改状态栏和标题栏颜色
  9. AndroidMainifest标签使用说明3——<activity-alias>

随机推荐

  1. C的第二天-常量
  2. 最新·前端的工资分布情况 - 你拖后腿了
  3. 学习C的第二天-变量
  4. IDEA 2020年最后一个版本更新了,机器学习
  5. 面试官:高并发下重启服务,接口调用老是超时
  6. 串匹配(朴素模式匹配算法)
  7. 假期结束了,是时候收收心准备过年了
  8. Canvas 动画的性能优化实践
  9. 《趣说前端 - 002 》— 两种作用域模型介
  10. 贞炸了!上线之后,消息收不到了!