底部导航栏在Android应用中非常常见,利用Fragment+RadioButton可以轻松实现这个效果。下面是详细的步骤:
1. 布局文件
首先,在主布局文件中添加FrameLayout来放置Fragment。
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
然后,添加RadioButton作为菜单,放在一个RadioGroup中。
<RadioGroup
android:id="@+id/menu_rg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="#fff"
android:gravity="center">
<RadioButton
android:id="@+id/menu_home"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableTop="@drawable/ic_home"
android:text="@string/menu_home"/>
<RadioButton
android:id="@+id/menu_message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableTop="@drawable/ic_message"
android:text="@string/menu_message"/>
<RadioButton
android:id="@+id/menu_mine"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableTop="@drawable/ic_mine"
android:text="@string/menu_mine"/>
</RadioGroup>
2. 创建Fragment
在应用中添加对应的Fragment,如下:
public class HomeFragment extends Fragment {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_home, container, false);
return view;
}
}
把各个Fragment类中的视图元素放的每个Fragment的对应布局文件中。
3. 实现底部导航栏
在activity中实现底部导航栏,用一个FragmentTransaction来管理,然后使用RadioButton与Fragment来替换FrameLayout中的布局(即添加Fragment到FrameLayout中)。
public class MainActivity extends AppCompatActivity implements RadioGroup.OnCheckedChangeListener{
private RadioGroup mRadioGroup;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRadioGroup = (RadioGroup) findViewById(R.id.menu_rg);
mRadioGroup.setOnCheckedChangeListener(this);
RadioButton radioButton = (RadioButton) mRadioGroup.findViewById(R.id.menu_home);
radioButton.setChecked(true);
//设置默认的Fragment
getSupportFragmentManager().beginTransaction().replace(R.id.container, new HomeFragment()).commit();
}
@Override
public void onCheckedChanged(RadioGroup radioGroup, int i) {
Fragment fragment = null;
switch (i) {
case R.id.menu_home:
fragment = new HomeFragment();
break;
case R.id.menu_message:
fragment = new MessageFragment();
break;
case R.id.menu_mine:
fragment = new MineFragment();
break;
}
if (fragment != null) {
getSupportFragmentManager().beginTransaction().replace(R.id.container, fragment).commit();
}
}
}
这样,当用户点击了底部导航按钮,就会切换到对应的Fragment。
注意:RadioButton的选中状态应该在activity的onCreate中设定默认值,避免程序崩溃。同时,根据应用的需求可以自定义RadioButton的样式。
示例1:以GitHub的Android客户端app为例,实现底部导航栏。具体实现效果你可以参考官方项目 https://github.com/github/android 。
示例2:以博客园的Android客户端app为例,实现底部导航栏。具体实现效果你可以参考开源项目 https://github.com/ccj659/Cnblogs-Android 。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:android中Fragment+RadioButton实现底部导航栏 - Python技术站