首先,在做底部导航栏界面之前,先来分析一下界面结构,比如界面的基本布局,用到哪些基础的控件。
整体是一个纵向的线性布局(紫色框),自上到下放了一个线性布局(红色框)和一个单选按钮组(橙色框)。单选按钮组类似于一个横向的线性布局,从左到右放了四个单选按钮。
分析完后开始写代码,
因为我们的单选按钮是自定义的样式,所以先做下面这些准备。
第一,准备素材资源。
把图片资源放入res/drawable/文件夹下。ctrl+c,选中res/drawable 文件夹ctrl+v
第二,准备样式资源。
把写好的selector_nav_course.xml,
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:drawable="@mipmap/ic_course_selected"/>
<item android:drawable="@mipmap/ic_course"/>
</selector>
selector_nav_excise.xml,
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:drawable="@mipmap/ic_exercise_selected"/>
<item android:drawable="@mipmap/ic_exercise"/>
</selector>
selector_nav_massage.xml,
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:drawable="@mipmap/ic_message_selected"/>
<item android:drawable="@mipmap/ic_message"/>
</selector>
selector_nav_my.xml,
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:drawable="@mipmap/ic_my_selected"/>
<item android:drawable="@mipmap/ic_my"/>
</selector>
selector_nav_text.xml,
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:color="@color/colorBlue"/>
<item android:color="@color/colorGray"/>
</selector>
如果你selector_nav_text.xml文件中用到的颜色没有定义,请在res/value/color.xml中定义
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#008577</color>
<color name="colorPrimaryDark">#00574B</color>
<color name="colorAccent">#D81B60</color>
<color name="colorGray">#2F2F2F</color>
<color name="colorBlue">#1E6D96</color>
</resources>
5个文件放在res/drawable/文件夹下。就像这样
第三,资源准备完毕,自定义按钮样式。在res/values/style.xml中写入如下代码
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
<!-- Customize your theme here. -->
</style>
<!-- 底部菜单按钮的样式-->
<style name="TabMenuItem">
<!-- 将默认的按钮样式设为空,即不使用默认的样式-->
<item name="android:button">@null</item>
<!-- 自定义按钮样式 name后的内容为属性设置样式的名称通过设置<item></item>之间的内容设置自定义的样式的属性值-->
<item name="android:layout_weight">1</item>
<item name="android:layout_width">8dp</item>
<item name="android:layout_height">match_parent</item>
<item name="android:textSize">14sp</item>
<item name="android:textColor">@drawable/selector_nav_text</item>
<item name="android:gravity">center</item>
<item name="android:paddingTop">3dp</item>
</style>
</resources>
这种写法是引用了下面的知识点,可以回顾一下
终于最后一步啦!!!
右键-new-Activity-Empty Activity
在res/layout/activity_tab_bar.xml中写入如下代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".HomeActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="#00ff00"
android:orientation="vertical"
>
<FrameLayout
android:id="@+id/main_body"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorBlue">
</FrameLayout>
</LinearLayout>
<RadioGroup
android:id="@+id/btn_group"
android:layout_width="match_parent"
android:layout_height="56dp"
android:background="#F2F2F2"
android:orientation="horizontal">
<RadioButton
android:id="@+id/btn_course"
style="@style/TabMenuItem"
android:drawableTop="@drawable/selector_nav_course"
android:text="课程"
/>
<RadioButton
android:id="@+id/btn_execise"
style="@style/TabMenuItem"
android:drawableTop="@drawable/selector_nav_execise"
android:text="习题"
/>
<RadioButton
android:id="@+id/btn_message"
style="@style/TabMenuItem"
android:drawableTop="@drawable/selector_nav_message"
android:text="咨询"
/>
<RadioButton
android:id="@+id/btn_my"
style="@style/TabMenuItem"
android:drawableTop="@drawable/selector_nav_my"
android:checked="true"
android:text="我"
/>
</RadioGroup>
</LinearLayout>
需要注意的是第一个LinerLayout的orientation属性是纵向的,RadioGroup的orientation属性是横向的。当第二个LinerLayout的高度设为0dp,RadioGroup的高度设为指定高度是可以实现RadioGroup被LinerLayout顶在最下方的效果。
就做好了。