初始化底部导航栏
首先我们建立一个带有Bottom Navigation Activity项目,新建项目时直接选择Bottom Navigation Activity即可,也可以右键新建Bottom Navigation Activity活动。
初始化的项目结构如下:
- java中ui文件夹中包含的三个文件夹即为底部导航栏的三个模块,xxxFragment为碎片文件,xxxViewModel为数据视图文件;
- MainActivity是该底部导航栏的活动,三个碎片链接在该活动中;
- layout文件夹中三个fragment_xxx.xml文件即为三个模块的布局文件,activity_main.xml文件即为MainActivity活动的布局文件;
- menu文件夹中的bottom_nav_menu.xml为菜单配置文件(如果要增加模块需要在此处进行添加);
- navigation文件夹中的mobile_navigation.xml为碎片与底部导航栏链接配置文件(如果要增加模块此处也需要进行添加);
- values文件夹中的文件则为一些基本配置文件,如colors.xml为全局颜色配置。
自定义底部导航栏
在上面初始化导航栏的基础上,我们进行自定义修改。
首先,我们将ui文件夹中的文件夹级文件重命名(Shift+F6),例如:将dashboard改为myself
文章来源地址https://www.toymoban.com/news/detail-739859.html
修改ViewModel文件时会有如下弹窗,我们选中点击OK即可。
此时我们就会发现,myselfFragment文件报错Cannot resolve symbol 'FragmentDashboardBinding'
这个问题来源于我们没有修改该文件的FragmentXxxBinding,修改如下:
// 修改前
public class MyselfFragment extends Fragment {
private FragmentDashboardBinding binding;
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
MyselfViewModel myselfViewModel =
new ViewModelProvider(this).get(MyselfViewModel.class);
binding = FragmentDashboardBinding.inflate(inflater, container, false);
View root = binding.getRoot();
final TextView textView = binding.textDashboard;
myselfViewModel.getText().observe(getViewLifecycleOwner(), textView::setText);
return root;
}
@Override
public void onDestroyView() {
super.onDestroyView();
binding = null;
}
}
// 修改后
public class MyselfFragment extends Fragment {
private FragmentMyselfBinding binding;
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
MyselfViewModel myselfViewModel =
new ViewModelProvider(this).get(MyselfViewModel.class);
binding = FragmentMyselfBinding.inflate(inflater, container, false);
View root = binding.getRoot();
final TextView textView = binding.textDashboard;
myselfViewModel.getText().observe(getViewLifecycleOwner(), textView::setText);
return root;
}
@Override
public void onDestroyView() {
super.onDestroyView();
binding = null;
}
}
接下来我们修改menu和navigation文件夹中的文件
bottom_nav_menu.xml文件(@string/title_myself需要在values文件夹中的strings.xml中进行配置,@drawable/ic_myself_black_24dp需要在drawable文件夹中添加图标)
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/navigation_home"
android:icon="@drawable/ic_home_black_24dp"
android:title="@string/title_home" />
<item
android:id="@+id/navigation_myself"
android:icon="@drawable/ic_myself_black_24dp"
android:title="@string/title_myself" />
<item
android:id="@+id/navigation_notifications"
android:icon="@drawable/ic_notifications_black_24dp"
android:title="@string/title_notifications" />
</menu>
mobile_navigation.xml文件修改如下:id属性用于在MainActivity中链接,name属性用于链接Fragment文件,label为标题,layout为布局文件。
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/mobile_navigation"
app:startDestination="@+id/navigation_home">
<fragment
android:id="@+id/navigation_home"
android:name="com.example.bottom_nav_test.ui.home.HomeFragment"
android:label="@string/title_home"
tools:layout="@layout/fragment_home" />
<fragment
android:id="@+id/navigation_myself"
android:name="com.example.bottom_nav_test.ui.myself.MyselfFragment"
android:label="@string/title_Myself"
tools:layout="@layout/fragment_myself" />
<fragment
android:id="@+id/navigation_notifications"
android:name="com.example.bottom_nav_test.ui.notifications.NotificationsFragment"
android:label="@string/title_notifications"
tools:layout="@layout/fragment_notifications" />
</navigation>
此时MainActivity又会产生报错:Cannot resolve symbol 'navigation_dashboard'
我们找到报错的行
由于我们修改了mobile_navigation.xml的id属性,所以MainActivity中也需要进行修改。
修改如下:
AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(
R.id.navigation_home, R.id.navigation_myself,
R.id.navigation_notifications).build();
此时就启动成功了:(中间的标题在xxxViewModel.java中修改)
文章来源:https://www.toymoban.com/news/detail-739859.html
到了这里,关于安卓Bottom Navigation Activity的自定义使用,即常见错误的处理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!