当前位置: 首页 > news >正文

android studio底部导航栏

实现底部导航栏切换

将java文件return的xml文件赋值给页面FrameLayout控件
java文件BottomNavigationView,监听器setOnNavigationItemSelectedListener

MainActivity.java代码
package com.example.myapplication;import android.os.Bundle;import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;import com.google.android.material.bottomnavigation.BottomNavigationView;public class MainActivity extends AppCompatActivity {private BottomNavigationView bottomNavigationView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main4);bottomNavigationView = findViewById(R.id.bottom_navigation);// 默认显示首页getSupportFragmentManager().beginTransaction().replace(R.id.frame_layout, new HomeFragment()).commit();// 设置切换监听bottomNavigationView.setOnNavigationItemSelectedListener(item -> {Fragment selectedFragment;switch (item.getItemId()) {case R.id.nav_search:selectedFragment = new SearchFragment();break;case R.id.nav_profile:selectedFragment = new ProfileFragment();break;case R.id.nav_home:default:selectedFragment = new HomeFragment();break;}getSupportFragmentManager().beginTransaction().replace(R.id.frame_layout, selectedFragment).commit();return true;});}
}
HomeFragment.java代码:
package com.example.myapplication;import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;import java.util.zip.Inflater;public class HomeFragment extends Fragment {private TextView homeText;private Button updateButton;public View onCreateView(@NonNull LayoutInflater inflater,@Nullable ViewGroup container,@Nullable Bundle savedInstanceState) {// 加载布局文件View view = inflater.inflate(R.layout.fragment_home, container, false);// 获取控件homeText = view.findViewById(R.id.home_text);updateButton = view.findViewById(R.id.update_button);// 设置按钮点击事件updateButton.setOnClickListener(v -> {homeText.setText("文字已更新!");});return view;}
}
ProfileFragment.java代码:
package com.example.myapplication;import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;public class ProfileFragment extends Fragment {public View onCreateView(@NonNull LayoutInflater inflater,@Nullable ViewGroup container,@Nullable Bundle savedInstanceState) {return inflater.inflate(R.layout.fragment_home, container, false);}
}
SearchFragment.java代码:
package com.example.myapplication;import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;public class SearchFragment extends Fragment {public View onCreateView(@NonNull LayoutInflater inflater,@Nullable ViewGroup container,@Nullable Bundle savedInstanceState) {return inflater.inflate(R.layout.fragment_search, container, false);}
}
activity_main4.xml代码:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent"><!-- 用于切换内容的 Fragment 容器 --><FrameLayoutandroid:id="@+id/frame_layout"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_above="@id/bottom_navigation"/><!-- 底部导航栏 --><com.google.android.material.bottomnavigation.BottomNavigationViewandroid:id="@+id/bottom_navigation"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_alignParentBottom="true"app:menu="@menu/bottom_nav_menu"/>
</RelativeLayout>
fragment_home.xml代码:
<?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:gravity="center"
android:orientation="vertical"
android:padding="16dp"><TextViewandroid:id="@+id/home_text"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="这是首页"android:textSize="24sp"android:padding="16dp" /><Buttonandroid:id="@+id/update_button"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="点我更新文字" />
</LinearLayout>
fragment_search.xml代码:
<TextView xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"android:text="HOME 1"android:textSize="30sp" />

在resources/menu/bottom_nav_menu.xml代码如下:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"><itemandroid:id="@+id/nav_home"android:title="首页"android:icon="@android:drawable/ic_menu_view" /><itemandroid:id="@+id/nav_search"android:title="搜索"android:icon="@android:drawable/ic_menu_search" /><itemandroid:id="@+id/nav_profile"android:title="我的"android:icon="@android:drawable/ic_menu_myplaces" />
</menu>

运行结果:

相关文章:

  • HarmonyOS运动开发:如何选择并上传运动记录
  • Flutter Container 组件详解
  • 斐讯N1部署Armbian与CasaOS实现远程存储管理
  • 深入解析XXE漏洞利用:Base64编码的PHP过滤器+回调回传攻击
  • CentOS Stream 9——RustDesk基础版自建教程(Docker)
  • 【Typst】自定义模块mDateTime
  • ESP32 004 Thonny 配置简单的轻量级MicroPython开发IDE
  • 提升iOS开发效率:通过KeyMob等工具进行全面性能分析与调试
  • .NET 的IOC框架Unity代码示例
  • 游戏引擎学习第315天:取消排序键的反向顺序
  • 2025.6.11总结
  • 中科院1区|IF6.7:基于PCA/OPLS-DA和KEGG通路分析的多组学整合,揭示沙棘-水飞蓟复方改善高脂血症的分子基础
  • 【QT】窗口详解
  • FanControl:智能散热,稳定运行
  • JS 原型与原型链详解
  • CMO增加人工智能投资:数据表明了什么
  • 广东食品安全管理员证有哪些,怎么考的呢
  • const auto 和 auto
  • 第二节:Vben Admin v5 (vben5) Python-Flask 后端开发详解(附源码)
  • MySQL基础知识(DDL、DML)
  • 外贸交流软件有哪些/南宁求介绍seo软件
  • 东莞网站建设设计价格/媒体资源
  • 烟台网站开发/sem是什么职位
  • 网站制作布局/海南快速seo排名优化
  • 网站安全的建设目标/网站推广优化平台
  • kindeditor for wordpress/宁波seo外包