現在App基本的標配除了側滑菜單,還有一個就是底部導航欄,常見的聊天工具QQ,微信,購物App都有底部導航欄,用戶可以隨便切換看不同的內容,說是情懷也好,用戶體驗也罷。我們開發的主要的還是講的是如何如何實現其功能,網上實現的方式無外乎兩種,一種是使用tabhost進行切換,一種是直接使用Fragment進行切換,底部導航欄的布局有的使用的是線性布局,有的是使用的RadioGroup,本文中是使用fragment+RadioGroup是實現的,看正文吧:
基礎布局

其中主要低 底部導航欄,其他都沒有什么,上面是一個Fragment自己替換一下即可,關於Fragment的使用可參考本人之前的博客;
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>
看下新建的布局和資源文件:

其中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代碼如下:
<?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>
實現Demo
MainActivity.java中的代碼,主要的就是設置一下OnCheckedChangeListener,注意MainActivity中需要繼承FragmentActivity:
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 即可:
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);
}
}
最后看張通訊錄的截圖吧:
、-
如果有需要,推薦之后,評論區留下郵箱,一天之內會處理~
