赞
踩
最近写毕业设计遇到了这个问题,鄙人是个初学Android小白,于是找了视频学习后解决了,就写一下,如果说的有错误的地方欢迎在评论区告诉我,废话不多说。开始。
运行展示:
下面写的页面为第三个页面,其他的都是一样的写法,只是页面内容不同,第三个页面我没写内容
首先,要在 主页面中添加底部导航栏;
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout 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:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:id="@+id/content_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_above="@id/view_line" android:orientation="vertical"></LinearLayout> <View android:id="@+id/view_line" android:layout_width="match_parent" android:layout_height="1dp" android:layout_above="@id/bottom_tab" android:background="@color/design_default_color_error" /> <LinearLayout android:id="@+id/bottom_tab" android:layout_width="match_parent" android:layout_height="50dp" android:layout_alignParentBottom="true" android:background="#B5A7A7" android:gravity="center" android:orientation="horizontal"> <TextView android:id="@+id/one" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center" android:text="首页" android:textSize="20sp" /> <TextView android:id="@+id/two" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center" android:text="地图" android:textSize="20sp" /> <TextView android:id="@+id/three" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center" android:text="论坛" android:textSize="20sp" /> <TextView android:id="@+id/frou" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center" android:text="个人" android:textSize="20sp" /> </LinearLayout> </RelativeLayout> </androidx.constraintlayout.widget.ConstraintLayout>
view为导航栏上方的直线,第一个LinearLayout为装Fragment页面的容器
之后要写导航栏对应页面,我写的有四个页面,这里我只放了第三个页面的代码,其余页面中的内容为自己开发相应页面的内容
<?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"> <TextView android:id="@+id/textView3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="3" /> </LinearLayout>
这个页面只有一个Textview,我没写其他的内容。
之后在Mainactivity中的程序如下:
public class MainActivity extends AppCompatActivity implements View.OnClickListener { //声明Fragment对象 private Fragment fragment1,fragment2,fragment3,fragment4,nowFragemnt; //声明底部标签 private TextView tab1,tab2,tab3,tab4; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);//设置主页面 initUI();//初始化UI方法 } //初始化UI界面 private void initUI(){ //初始化底部标签 tab1 = findViewById(R.id.one); tab2 = findViewById(R.id.two); tab3 = findViewById(R.id.three); tab4 = findViewById(R.id.frou); //设置底部标签的变化,默认第一个被选中 tab1.setBackgroundColor(Color.RED); tab2.setBackgroundColor(Color.WHITE); tab3.setBackgroundColor(Color.WHITE); tab4.setBackgroundColor(Color.WHITE); //为底部标签内设置点击事件 tab1.setOnClickListener(this); tab2.setOnClickListener(this); tab3.setOnClickListener(this); tab4.setOnClickListener(this); showFragment1(); } //第一个标签被点击 private void showFragment1(){ //开启事务,Fragment的切换是由事务控制 FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); //判断Fragment是否为空 if (fragment1 == null){ fragment1 = new Fragment_1(); //添加Fragmet1到事务中 transaction.add(R.id.content_layout,fragment1); } //隐藏所有的Fragment hideAllFragment(transaction); //显示Fragment transaction.show(fragment1); //记录Fragment nowFragemnt = fragment1; //提交事务 transaction.commit(); //设置底部标签的变化 tab1.setBackgroundColor(Color.RED); tab2.setBackgroundColor(Color.WHITE); tab3.setBackgroundColor(Color.WHITE); tab4.setBackgroundColor(Color.WHITE); } //第二个标签被点击 private void showFragment2(){ //开启事务,Fragment的切换是由事务控制 FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); //判断Fragment是否为空 if (fragment2 == null){ fragment2 = new Fragment_2(); //添加Fragmet1到事务中 transaction.add(R.id.content_layout,fragment2); } //隐藏所有的Fragment hideAllFragment(transaction); //显示Fragment transaction.show(fragment2); //记录Fragment nowFragemnt = fragment2; //提交事务 transaction.commit(); //设置底部标签的变化 tab1.setBackgroundColor(Color.WHITE); tab2.setBackgroundColor(Color.RED); tab3.setBackgroundColor(Color.WHITE); tab4.setBackgroundColor(Color.WHITE); } //第三个标签被点击 private void showFragment3(){ //开启事务,Fragment的切换是由事务控制 FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); //判断Fragment是否为空 if (fragment3 == null){ fragment3 = new Fragment_3(); //添加Fragmet3到事务中 transaction.add(R.id.content_layout,fragment3); } //隐藏所有的Fragment hideAllFragment(transaction); //显示Fragment transaction.show(fragment3); //记录Fragment nowFragemnt = fragment3; //提交事务 transaction.commit(); //设置底部标签的变化 tab1.setBackgroundColor(Color.WHITE); tab2.setBackgroundColor(Color.WHITE); tab3.setBackgroundColor(Color.RED); tab4.setBackgroundColor(Color.WHITE); } //第四个标签被点击 private void showFragment4(){ //开启事务,Fragment的切换是由事务控制 FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); //判断Fragment是否为空 if (fragment4 == null){ fragment4 = new Fragment_4(); //添加Fragmet1到事务中 transaction.add(R.id.content_layout,fragment4); } //隐藏所有的Fragment hideAllFragment(transaction); //显示Fragment transaction.show(fragment4); //记录Fragment nowFragemnt = fragment4; //提交事务 transaction.commit(); //设置底部标签的变化 tab1.setBackgroundColor(Color.WHITE); tab2.setBackgroundColor(Color.WHITE); tab3.setBackgroundColor(Color.WHITE); tab4.setBackgroundColor(Color.RED); } //隐藏所有的Fragment private void hideAllFragment(FragmentTransaction transaction){ if (fragment1!= null){ transaction.hide(fragment1); } if (fragment2!= null){ transaction.hide(fragment2); } if (fragment3!= null){ transaction.hide(fragment3); } if (fragment4!= null){ transaction.hide(fragment4); } } //点击事件 @Override public void onClick(View view) { switch (view.getId()){ case R.id.one: showFragment1();break; case R.id.two: showFragment2();break; case R.id.three: showFragment3();break; case R.id.frou: showFragment4();break; default: break; } } }
在initUI()中最后一行的showFragment1()是把第一个页面设置为刚进入软件的第一个页面,点击事件方法作用为点击哪一个底部标签就显示哪一个Fragment页面
对于每一个Fragment都要有相对应的类,这是第三个Fragment的:
public class Fragment_3 extends Fragment { @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { //创建Fragment布局 View view = inflater.inflate(R.layout.layout_3,container,false); return view; } }
这是第三个页面的代码,对应上面的页面文件(.xml)的那个,页面里我没写什么内容,在类里面我就没写其他东西了,只是把页面返回去,在这个类中,主要运行的是onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState)方法,其他的Fragment中也一样的,我这里只放了一个的代码,其他三个我没放,但是都是大同小异的。
这样就可以进行页面的切换了,但是用RadioGroup来做底部导航栏才是比较好的,这个只是能进行页面切换,底部导航栏比较简陋。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。