导航栏制作
熟悉手机应用的人都知道,手机应用一般在底部有一个导航栏,当你点击某一项时,上面的页面就会转为相关的页面。
上面的就是一个导航栏。
导航栏的图标一般两个为一组,分别展示选中和未选中的状态。
导航栏的制作:
导航栏的制作有多种,这里我们选择最简单的RadioGroup。
<RadioGroup
android:id="@+id/radioGroup"
android:checkedButton="@+id/radio_button_1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="horizontal"
>
<RadioButton
android:id="@+id/test_main_rb_care"
android:paddingTop="5dp"
android:layout_width="0dp"
android:layout_height="50dp"
android:text="关注"
android:drawableTop="@drawable/shape_index_care"
android:drawablePadding="3dp"
android:button="@null"
android:gravity="center"
android:layout_weight="1"
/>
</RadioGroup>
drawable/shape_index_care文件:
state_checked:在选中和非选中状态显示不同的图片
<?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/item_4"/>
<item android:state_checked="false" android:drawable="@drawable/item_3"/>
</selector>
这样我们的底部导航栏就做好了:
Fragment更换
1.先定义需要展示的Fragment:
private Fragment currentFragment; //当前展示的Fragment
private Fragment careFragment;
private Fragment infoFragment;
private Fragment homeFragment;
2.选择初始页面:
@Override
public void initView() {
super.initView();
homeFragment = new TestHomeFragment();
showFragment(homeFragment, "homeFragment");
}
3.给导航栏添加事件:
public void initListener() {
super.initListener();
binding.testMainRbUser.setOnClickListener(this);
binding.testMainRbCare.setOnClickListener(this);
binding.testMainRbInfo.setOnClickListener(this);
}
4.具体事件:
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.test_main_rb_user:
showFragment(homeFragment, "homeFragment");
break;
case R.id.test_main_rb_care:
if (careFragment == null) {
careFragment = new CareFragment();
}
showFragment(careFragment, "careFragment");
break;
case R.id.test_main_rb_info:
if (infoFragment == null) {
infoFragment = new InfoFragment();
}
showFragment(infoFragment, "infoFragment");
break;
}
5.showFragment:
private void showFragment(Fragment fragment, String tag) {
//如果选择的页面和当前页面一致,则什么都不干
if (fragment == currentFragment) {
return;
}
//获取事件
//getSupportFragmentManager():获取当前添加的所有fragment的Manager
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
//获取当前添加的所有的Fragment,并将其隐藏起来
for (Fragment f : getSupportFragmentManager().getFragments()) {
fragmentTransaction.hide(f);
}
//如果fragment没有被添加,就将其添加进来,如果已经添加,直接展示出来就好
if (!fragment.isAdded()) {
fragmentTransaction.add(R.id.test_main_fragment, fragment, tag);
}else {
fragmentTransaction.show(fragment);
}
//提交事件
fragmentTransaction.commit();
//当前页面更换为选中页面
currentFragment = fragment;
}
}