如今App基本的标配除了侧滑菜单,还有一个就是底部导航栏,常见的聊天工具QQ,微信,购物App都有底部导航栏,用户能够随便切换看不一样的内容,说是情怀也好,用户体验也罢。咱们开发的主要的仍是讲的是如何如何实现其功能,网上实现的方式无外乎两种,一种是使用tabhost进行切换,一种是直接使用Fragment进行切换,底部导航栏的布局有的使用的是线性布局,有的是使用的RadioGroup,本文中是使用fragment+RadioGroup是实现的,看正文吧:java
其中主要低 底部导航栏,其余都没有什么,上面是一个Fragment本身替换一下便可,关于Fragment的使用可参考本人以前的博客;android
activity_main.xml中的布局文件,因为样式比较多能够单独的放在style中的,鉴于方便查看,直接放在布局文件中,activity_main中的代码:微信
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" tools:context="com.example.googlebottomfragment.MainActivity" > <FrameLayout android:id="@+id/main_content" android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="1" /> <RadioGroup android:id="@+id/tab_menu" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/mmfooter_bg" android:orientation="horizontal" > <RadioButton android:id="@+id/rbChat" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_gravity="bottom" android:layout_weight="1" android:background="@drawable/tab_selector_checked_bg" android:button="@null" android:checked="true" android:drawableTop="@drawable/tab_selector_weixing" android:gravity="center_horizontal|bottom" android:paddingTop="2dp" android:text="微信" android:textColor="@color/tab_selector_tv_color" /> <RadioButton android:id="@+id/rbAddress" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_gravity="bottom" android:layout_weight="1" android:background="@drawable/tab_selector_checked_bg" android:button="@null" android:drawableTop="@drawable/tab_selector_tongxunlu" android:gravity="center_horizontal|bottom" android:paddingTop="2dp" android:text="通信录" android:textColor="@color/tab_selector_tv_color" /> <RadioButton android:id="@+id/rbFind" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_gravity="bottom" android:layout_weight="1" android:background="@drawable/tab_selector_checked_bg" android:button="@null" android:drawableTop="@drawable/tab_selector_faxian" android:gravity="center_horizontal|bottom" android:paddingTop="2dp" android:text="发现" android:textColor="@color/tab_selector_tv_color" /> <RadioButton android:id="@+id/rbMe" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_gravity="bottom" android:layout_weight="1" android:background="@drawable/tab_selector_checked_bg" android:button="@null" android:drawableTop="@drawable/tab_selector_wo" android:gravity="center_horizontal|bottom" android:paddingTop="2dp" android:text="我" android:textColor="@color/tab_selector_tv_color" /> </RadioGroup> </LinearLayout>
看下新建的布局和资源文件:ide
其中tab_selector_tv_color.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="@android:color/white"/> <item android:state_checked="false" android:color="@android:color/darker_gray"/> <item android:color="@android:color/darker_gray"/> </selector>
其中tab_selector_checked_bg.xml布局文件选中的时候每一个RadioButtton的背景颜色:布局
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:state_checked="true" android:drawable="@drawable/tab_bg_halo"/> </selector>
其中tab_selector_weixing.xml主要是点击的时候显示不一样的图片,一个是绿色的,一个是白色:字体
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:state_checked="false" android:drawable="@drawable/tab_weixin_normal"></item> <item android:state_checked="true" android:drawable="@drawable/tab_weixin_pressed"></item> </selector>
其中须要切换的chat.xml,address.xml,find.xml,me.xml都是同样的,其中chat.xml代码以下:google
<?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" > <TextView android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="微信" android:textSize="20sp" /> <TextView android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="http://www.cnblogs.com/xiaofeixiang" android:textSize="15sp" /> </LinearLayout>
MainActivity.java中的代码,主要的就是设置一下OnCheckedChangeListener,注意MainActivity中须要继承FragmentActivity:spa
public void initView() { chat = new FragmentChat(); getSupportFragmentManager().beginTransaction().replace(R.id.main_content, chat).commit(); myTabRg = (RadioGroup) findViewById(R.id.tab_menu); myTabRg.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { // TODO Auto-generated method stub switch (checkedId) { case R.id.rbChat: chat = new FragmentChat(); getSupportFragmentManager().beginTransaction().replace(R.id.main_content, chat) .commit(); break; case R.id.rbAddress: if (address==null) { address =new FragmentAddress(); } Log.i("MyFragment", "FragmentAddress"); getSupportFragmentManager().beginTransaction().replace(R.id.main_content, address).commit(); break; case R.id.rbFind: find = new FragmentFind(); getSupportFragmentManager().beginTransaction().replace(R.id.main_content, find) .commit(); break; case R.id.rbMe: me = new FragmentMe(); getSupportFragmentManager().beginTransaction().replace(R.id.main_content, me) .commit(); break; default: break; } } });
FragmentChat中的代码,其他的三个FragmentAddress,FragmentFind,FragmentMe相似,就不贴代码了,主要是继承Fragment 便可:orm
public class FragmentChat extends Fragment { @Override public void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { // TODO Auto-generated method stub return inflater.inflate(R.layout.chat, null); } }
最后看张通信录的截图吧:
、-
若是有须要,推荐以后,评论区留下邮箱,一天以内会处理~