一、常见的底部菜单(底部导航栏)的实现方式
常见的实现方式有:
1、TabHost+Activity:资源开销比较大,官方已经不推荐使用。
2、RadioButton(RadioGroup)+Fragment:实现起来比较麻烦。
3、FragmentTabHost+Fragment:实现简单,资源开销小,推荐使用。
二、FragmentTabHost介绍
如下图所示,整一个底部导航栏是一个FragmentTabHost,里面包含的每一个“小按钮”我们称之为TabSpec,也就是每一个分页。TabSpec里面需要有指示器Indicator,用来指示用户选中了哪一个,里面一般包含一张图片和文字描述。
三、FragmentTabHost具体实现方法
核心的实现步骤以及注意点有:
1、所用的Activity必须要继承FragmentActivity,不然项目就会崩溃。
2、调用FragmentTabHost的setup()方法,设置FragmentManager,以及指定用于装载Fragment的布局容器。
3、调用FragmentTabHost的addTab()方法添加分页。
四、代码
要使用FragmentTabHost,首先需要布局中添加进来,这里我们并没有使用官方提供的v4支持包中的FragmentTabHost,而是使用了我们自定义的FragmentTabHost,主要是因为官方提供的FragmentTabHost并没有进行优化,每次都会重新初始化一次Fragment。自定义FragmentTabHost的代码会在附件给出。
第一个FrameLayout是用于装载Fragment的,第二个Fragment只是官方文档要求我们这样写的而已,官方要求我们将Fragment放在导航栏之下,与我们的需求刚好相反了。
再仔细看布局文件,主要是通过LinearLayout的weight属性来控制整个竖直方向的分配,具体不再赘述。
<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=".ui.activity.MainActivity">
<FrameLayout
android:id="@+id/realtabcontent"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="@color/bg_color"/>