布局
使用RadioGroup和RadioButton配合Fragment
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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" tools:context="com.ado.video.TabMenuActivity"> <!--Fragment容器--> <FrameLayout android:id="@+id/home_container" android:layout_width="match_parent" android:layout_height="match_parent" /> <!--底部tab栏--> <RadioGroup android:id="@+id/home_tab" android:layout_width="match_parent" android:layout_height="80dp" android:layout_alignParentBottom="true" android:background="#2da174" android:orientation="horizontal"> <!--为每个tab的图片和文字设置选择器--> <RadioButton android:id="@+id/tab_home" style="@style/HomeTabButton" android:drawableTop="@drawable/selector_tab_home" android:text="home" /> <RadioButton android:id="@+id/tab_sports" style="@style/HomeTabButton" android:drawableTop="@drawable/selector_tab_sport" android:text="sports" /> <RadioButton android:id="@+id/tab_profile" style="@style/HomeTabButton" android:drawableTop="@drawable/selector_tab_profile" android:text="profile" /> </RadioGroup> </RelativeLayout>
RadioButton的style
<style name="HomeTabButton"> <item name="android:layout_height">match_parent</item> <item name="android:layout_weight">1</item> <item name="android:gravity">center</item> <item name="android:button">@null</item> <item name="android:textSize">17sp</item> <item name="android:textColor">@drawable/selector_tab_text</item> </style>
Activity代码
public class TabMenuActivity extends AppCompatActivity implements RadioGroup.OnCheckedChangeListener { @BindView(R.id.home_container) FrameLayout homeContainer; @BindView(R.id.tab_home) RadioButton tabHome; @BindView(R.id.tab_sports) RadioButton tabSports; @BindView(R.id.tab_profile) RadioButton tabProfile; @BindView(R.id.home_tab) RadioGroup homeTab; private OneFragment oneFragment; private TwoFragment twoFragment; private ThreeFragment threeFragment; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_tab_menu); ButterKnife.bind(this); homeTab.setOnCheckedChangeListener(this); //默认选中首页 //必须先监听了,再设置才有效 homeTab.check(R.id.tab_home); } /** * 隐藏所有Fragment * * @param transaction */ private void hideAllFragments(FragmentTransaction transaction) { if (oneFragment != null) { transaction.hide(oneFragment); } if (twoFragment != null) { transaction.hide(twoFragment); } if (threeFragment != null) { transaction.hide(threeFragment); } } @Override public void onCheckedChanged(RadioGroup radioGroup, int i) { FragmentManager fm = getSupportFragmentManager(); FragmentTransaction transaction = fm.beginTransaction(); hideAllFragments(transaction); //每个tab选中前先隐藏,否则会出现重叠状态 //tab没有出现过才创建,有了就直接通过show()显示 switch (i) { case R.id.tab_home: if (oneFragment == null) { oneFragment = new OneFragment(); transaction.add(R.id.home_container, oneFragment); } else { transaction.show(oneFragment); } break; case R.id.tab_sports: if (twoFragment == null) { twoFragment = new TwoFragment(); transaction.add(R.id.home_container, twoFragment); } else { transaction.show(twoFragment); } break; case R.id.tab_profile: if (threeFragment == null) { threeFragment = new ThreeFragment(); transaction.add(R.id.home_container, threeFragment); } else { transaction.show(threeFragment); } break; } //最后记得提交了才生效 transaction.commit(); } }