两种方式:radiogroup+fragment 和linerlayout+fragment
步骤:
1、主界面布局如下:
<?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/home_fl_container"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
</FrameLayout>
<RadioGroup
android:id="@+id/home_rg_buttons"
android:layout_width="match_parent"
android:layout_height="55dp"
android:orientation="horizontal"
android:gravity="center_vertical"
>
<RadioButton
android:id="@+id/home_rb_message"
style="@style/HomeRadiobutton"
android:drawableTop="@drawable/sel_tab_message"
android:text="消息"
/>
<RadioButton
android:id="@+id/home_rb_work"
style="@style/HomeRadiobutton"
android:drawableTop="@drawable/sel_tab_work"
android:text="工作"
/>
<RadioButton
android:id="@+id/home_rb_addressbook"
style="@style/HomeRadiobutton"
android:drawableTop="@drawable/sel_tab_addressbook"
android:text="通讯录"
/>
<RadioButton
android:id="@+id/home_rb_personal"
style="@style/HomeRadiobutton"
android:drawableTop="@drawable/sel_tab_personal"
android:text="个人"
/>
</RadioGroup>
</LinearLayout>
效果图
贴其中一个的背景选择器 其他都类似
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@mipmap/tab_message_selected" android:state_selected="true"></item>
<item android:drawable="@mipmap/tab_message_selected" android:state_pressed="true"></item>
<item android:drawable="@mipmap/tab_message_selected" android:state_checked="true"></item>
<item android:drawable="@mipmap/tab_message_normal" ></item>
</selector>
2、 准备好所有的fragment,默认选中第一个
prepareFragments();
//默认选中第一个
rb_message.setChecked(true);
private void prepareFragments() {
fragments = new ArrayList<>();
fragments.add(new MessageFragment());
fragments.add(new WorkFragment());
fragments.add(new AddressBookFragment());
fragments.add(new PersonalFragment());
}
3、点击按钮切换fragment
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
switch (checkedId){
case R.id.home_rb_message:
showFragment(0);
break;
case R.id.home_rb_work:
showFragment(1);
break;
case R.id.home_rb_addressbook:
showFragment(2);
break;
case R.id.home_rb_personal:
showFragment(3);
break;
}
}
private void showFragment(int position) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
for(int i=0;i<fragments.size();i++){
BaseFragment baseFragment = fragments.get(i);
if(i==position){
if(baseFragment.isAdded()){
transaction.show(baseFragment);
}else{
transaction.add(R.id.home_fl_container,baseFragment);
}
}else{
if(baseFragment.isAdded()){
transaction.hide(baseFragment);
}
}
}
transaction.commitAllowingStateLoss();
}
思想就是点中该按钮 看该按钮对应的fragment添加没,,没添加就添加 添加了就显示 其他按钮对应的fragment如果添加了则隐藏
再贴一下另一种方法 :linearlayout+framlayout
1、布局编写
<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/fragment_content"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"></FrameLayout>
<TextView
style="@style/bg_line"/>
<include layout="@layout/bottom_nav_bar"/>
</LinearLayout>
include进去的布局
<?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="53dp"
android:background="@color/white"
android:orientation="horizontal">
<FrameLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_centerInParent="true"
android:layout_weight="1">
<LinearLayout
android:id="@+id/ll_tab_message"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical">
<ImageView
android:id="@+id/iv_tab_message"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_marginTop="6dp"
android:src="@mipmap/tab_message_normal"/>
<TextView
android:id="@+id/tv_tab_message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:text="@string/message"
android:textColor="@color/black_54alpha"
android:textSize="@dimen/txt_min"/>
</LinearLayout>
<com.hiteamtech.ddbes.ui.view.DragPointView
android:id="@+id/message_num"
android:layout_width="19dp"
android:layout_height="19dp"
android:layout_gravity="right"
android:layout_marginRight="19dp"
android:layout_marginTop="2dp"
android:layout_toRightOf="@id/ll_tab_message"
android:textColor="@android:color/white"
android:textSize="12sp"
android:visibility="invisible"/>
</FrameLayout>
<LinearLayout
android:id="@+id/ll_tab_work"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:id="@+id/iv_tab_work"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_marginTop="6dp"
android:src="@mipmap/tab_work_normal"/>
<TextView
android:id="@+id/tv_tab_work"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:text="@string/work"
android:textColor="@color/black_54alpha"
android:textSize="@dimen/txt_min"/>
</LinearLayout>
<LinearLayout
android:id="@+id/ll_tab_addressbook"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:id="@+id/iv_tab_addressbook"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_marginTop="6dp"
android:src="@mipmap/tab_addressbook_normal"/>
<TextView
android:id="@+id/tv_tab_addressbook"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:text="@string/addressbook"
android:textColor="@color/black_54alpha"
android:textSize="@dimen/txt_min"/>
</LinearLayout>
<LinearLayout
android:id="@+id/ll_tab_personal"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:id="@+id/iv_tab_personal"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_marginTop="6dp"
android:src="@mipmap/tab_personal_normal"/>
<TextView
android:id="@+id/tv_tab_personal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:text="@string/personal"
android:textColor="@color/black_54alpha"
android:textSize="@dimen/txt_min"/>
</LinearLayout>
2、初始化所有的fragmnet ,点击切换fragment
@Override
public void onClick(View v) {
super.onClick(v);
switch (v.getId()) {
case R.id.ll_tab_personal:
setSelect(3);
break;
case R.id.ll_tab_addressbook:
setSelect(2);
break;
case R.id.ll_tab_work:
setSelect(1);
break;
case R.id.ll_tab_message:
setSelect(0);
break;
}
}
public void setSelect(int i) {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
//将Fragment中的内容隐藏
hideFragment(transaction);
//将底部Tab恢复默认模式
reSetTab();
//替换Fragment内容
switch (i) {
case 0:
if (mMessageFragment == null) {
mMessageFragment = new MessageFragment();
transaction.add(R.id.fragment_content, mMessageFragment);
} else {
transaction.show(mMessageFragment);
}
mIv_msg.setImageResource(R.mipmap.tab_message_selected);
mTv_msg.setTextColor(0xdd509DE1);
setGuideConfig("home_message_guide", R.mipmap.home_message_guide_bg);
break;
case 1:
if (mWorkFragment == null) {
mWorkFragment = new WorkFragment();
transaction.add(R.id.fragment_content, mWorkFragment);
} else {
transaction.show(mWorkFragment);
}
mIv_work.setImageResource(R.mipmap.tab_work_selected);
mTv_work.setTextColor(0xdd509DE1);
setGuideConfig("home_work_guide", R.mipmap.home_work_guide_bg);
break;
case 2:
if (mAddressBookFragment == null) {
mAddressBookFragment = new AddressBookFragment();
transaction.add(R.id.fragment_content, mAddressBookFragment);
} else {
transaction.show(mAddressBookFragment);
}
mIv_addressbook.setImageResource(R.mipmap.tab_addressbook_selected);
mTv_addressbook.setTextColor(0xdd509DE1);
setGuideConfig("home_contact_guide", R.mipmap.home_contact_guide_bg);
break;
case 3:
if (mPersonalFragment == null) {
mPersonalFragment = new PersonalFragment();
transaction.add(R.id.fragment_content, mPersonalFragment);
} else {
transaction.show(mPersonalFragment);
}
mIv_personal.setImageResource(R.mipmap.tab_personal_selected);
mTv_personal.setTextColor(0xdd509DE1);
setGuideConfig("home_personal_guide", R.mipmap.home_personal_guide_bg);
break;
}
transaction.commitAllowingStateLoss();
}
//隐藏现有的fragment
//隐藏现有的fragment
private void hideFragment(FragmentTransaction transaction) {
if (mPersonalFragment != null)
transaction.hide(mPersonalFragment);
if (mAddressBookFragment != null)
transaction.hide(mAddressBookFragment);
if (mWorkFragment != null)
transaction.hide(mWorkFragment);
if (mMessageFragment != null)
transaction.hide(mMessageFragment);
}
//恢复底部栏图标文字默认的颜色
private void reSetTab() {
mIv_msg.setImageResource(R.mipmap.tab_message_normal);
mIv_work.setImageResource(R.mipmap.tab_work_normal);
mIv_addressbook.setImageResource(R.mipmap.tab_addressbook_normal);
mIv_personal.setImageResource(R.mipmap.tab_personal_normal);
mTv_msg.setTextColor(0x8a000000);
mTv_work.setTextColor(0x8a000000);
mTv_addressbook.setTextColor(0x8a000000);
mTv_personal.setTextColor(0x8a000000);
}