安卓學習--利用RadioButton實現底部導航欄
阿新 • • 發佈:2019-01-30
目標:利用RadioButton實現底部導航欄
簡介:底部導航欄是現在大部分app都會用到的功能
它幫助使用者可以通過導航在不同介面自由切換
實現過程
步驟1:編寫佈局檔案
用RadioGroup和RadioButton完成導航欄的佈局
用weight屬性來控制所佔比例
圖片用系統所自帶的一些圖片
準備一定空間放置FrameLayout用於之後跳轉
<?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:fitsSystemWindows="true"
android:orientation="vertical">
<FrameLayout
android:id="@+id/main_Frame"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1">
</FrameLayout>
<ImageView
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/spe"/>
<RadioGroup
android:id="@+id/main_menu"
android:background="@color/menu"
android:orientation ="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<RadioButton
android:id="@+id/RB_discover"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:button="@null"
android:checked="true"
android:drawableTop="@drawable/main_menu_discover"
android:drawableTint="@drawable/menu_color"
android:gravity="center"
android:text="@string/main_menu_discover"
/>
<RadioButton
android:id="@+id/RB_train"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:button="@null"
android:drawableTop="@drawable/main_menu_train"
android:drawableTint="@drawable/menu_color"
android:gravity="center"
android:text="@string/main_menu_train"
/>
<RadioButton
android:id="@+id/RB_social"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:button="@null"
android:drawableTop="@drawable/main_menu_social"
android:drawableTint="@drawable/menu_color"
android:gravity="center"
android:text="@string/main_menu_social"
/>
<RadioButton
android:id="@+id/RB_me"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:button="@null"
android:drawableTop="@drawable/main_menu_me"
android:drawableTint="@drawable/menu_color"
android:gravity="center"
android:text="@string/main_menu_me"
/>
</RadioGroup>
</LinearLayout>
編寫完佈局檔案可以達到以下介面
步驟2:編寫程式碼實現介面跳轉
1:建立4個fragment用於跳轉不同介面
2:編寫changemainFragment()方法監聽底部導航變換時使用
3:利用FragmentTransaction的hide方法來隱藏介面,show方法來顯示介面
public class MainActivity extends AppCompatActivity {
private RadioGroup mainmenu;
private MeFragment mMeFragment;
private Discover_Fragment mDiscover_fragment;
private SocialFragment mSocialFragment;
private TrainFragment mTrainFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//底部導航監聽
changemainFragment(R.id.RB_discover);
mainmenu = (RadioGroup) findViewById(R.id.main_menu);
mainmenu.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
changemainFragment(checkedId);
}
});
}
public void hideAllFragment(FragmentTransaction transaction){
if(mSocialFragment!=null){
transaction.hide(mSocialFragment);
}
if(mTrainFragment!=null){
transaction.hide(mTrainFragment);
}
if(mDiscover_fragment!=null){
transaction.hide(mDiscover_fragment);
}
if(mMeFragment!=null){
transaction.hide(mMeFragment);
}
}
/***
* 切換主fragment
*
*/
public void changemainFragment(int checkedId) {
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
hideAllFragment(fragmentTransaction);
switch (checkedId) {
case R.id.RB_discover: {
if(mDiscover_fragment == null) {
mDiscover_fragment = new Discover_Fragment();
fragmentTransaction.add(R.id.main_Frame, mDiscover_fragment);
}
else {
fragmentTransaction.show(mDiscover_fragment);
}
break;
}
case R.id.RB_me: {
if(mMeFragment == null) {
mMeFragment = new MeFragment();
fragmentTransaction.add(R.id.main_Frame, mMeFragment);
}
else {
fragmentTransaction.show(mMeFragment);
}
break;
}
case R.id.RB_social: {
if(mSocialFragment == null) {
mSocialFragment = new SocialFragment();
fragmentTransaction.add(R.id.main_Frame, mSocialFragment);
}
else {
fragmentTransaction.show(mSocialFragment);
}
break;
}
case R.id.RB_train: {
if(mTrainFragment == null) {
mTrainFragment = new TrainFragment();
fragmentTransaction.add(R.id.main_Frame, mTrainFragment);
}
else {
fragmentTransaction.show(mTrainFragment);
}
break;
}
}
fragmentTransaction.commit();
}
}
最終效果截圖(跳轉顯示的fragment為隨意練手用的介面)