【Android Studio】实现底部导航栏Tab切换(提供Gitee源码)

avatar
作者
猴君
阅读量:2

前言:本期教学如何制作底部导航栏以及使用Fragment实现页面切换的完整功能,本篇提供所有源代码,均测试无误,大家可以放心使用。

目录

一、功能演示

二、代码实现

2.1、bottom.xml

2.2、message.xml、book.xml和mine.xml

2.3、activity_main.xml

2.4、MessageFragment、BookFragment和MineFragment

2.5、MainActivity

三、Gitee源码


一、功能演示

点击下方Tab栏目可以切换到对应的页面。

消息页面:

通讯录页面:

我的页面:

二、代码实现

先给前端代码,大家按顺序参考就行。

2.1、bottom.xml

先写底部的布局,这里面的图标可以自己网上随便找。

完整代码:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout 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="100dp"     android:background="#ECECEC"     >      <LinearLayout         android:id="@+id/messageLayout"         android:layout_width="0dp"         android:layout_height="wrap_content"         android:layout_weight="1"         android:gravity="center"         android:orientation="vertical">          <ImageView             android:id="@+id/messageImageView"             android:layout_width="30dp"             android:layout_height="30dp"             android:layout_marginTop="15dp"             android:src="@drawable/message"             app:tint="#FFFFFF" />          <TextView             android:id="@+id/messageTextView"             android:layout_width="match_parent"             android:layout_height="wrap_content"             android:gravity="center"             android:text="消息"             android:textColor="@color/white"             android:textSize="24sp" />      </LinearLayout>      <LinearLayout         android:id="@+id/bookLayout"         android:layout_width="0dp"         android:layout_height="wrap_content"         android:layout_weight="1"         android:gravity="center"         android:orientation="vertical">          <ImageView             android:id="@+id/bookImageView"             android:layout_width="30dp"             android:layout_height="30dp"             android:layout_marginTop="15dp"             android:src="@drawable/book"             app:tint="#FFFFFF" />          <TextView             android:id="@+id/bookTextView"             android:layout_width="match_parent"             android:layout_height="wrap_content"             android:gravity="center"             android:text="通讯录"             android:textColor="@color/white"             android:textSize="24sp" />      </LinearLayout>      <LinearLayout         android:id="@+id/mineLayout"         android:layout_width="0dp"         android:layout_height="wrap_content"         android:layout_weight="1"         android:gravity="center"         android:orientation="vertical">          <ImageView             android:id="@+id/mineImageView"             android:layout_width="30dp"             android:layout_height="30dp"             android:layout_marginTop="15dp"             android:src="@drawable/mine"             app:tint="#FFFFFF" />          <TextView             android:id="@+id/mineTextView"             android:layout_width="match_parent"             android:layout_height="wrap_content"             android:gravity="center"             android:text="我的"             android:textColor="@color/white"             android:textSize="24sp" />      </LinearLayout>   </LinearLayout>

预览:

2.2、message.xml、book.xml和mine.xml

这三个xml分别对应三个栏目所切换的页面,这边只贴出一个,其他两个复制一下,改一下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">      <TextView         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:text="消息"         android:textSize="54sp" />  </LinearLayout>

2.3、activity_main.xml

写一个FrameLayout用于动态显示页面,底部把之前写好的bottom.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:orientation="vertical">       <FrameLayout         android:id="@+id/frame_content"         android:layout_width="match_parent"         android:layout_height="0dp"         android:layout_weight="1">      </FrameLayout>      <include         layout="@layout/bottom"         android:gravity="bottom" />  </LinearLayout>

下面展示后端java代码。 

2.4、MessageFragment、BookFragment和MineFragment

同样的我也是只给出一个完整代码,其他正常复制一下就行。

完整代码:

package com.example.tab;  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 MessageFragment extends Fragment {      public MessageFragment() {      }      @Nullable     @Override     public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {         return inflater.inflate(R.layout.message, container, false);     }      @Override     public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {         super.onViewCreated(view, savedInstanceState);         //页面初始化点击事件     }  } 

注: return inflater.inflate(R.layout.message, container, false);这边的R.layout.***复制的时候需要自己手动修改一下。

2.5、MainActivity

这个实体类主要就是实现点击切换的功能了。

完整代码:

package com.example.tab;  import android.graphics.Color; import android.os.Bundle; import android.view.View; import android.widget.LinearLayout;  import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity;  import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentTransaction;  import com.example.tab.BookFragment; import com.example.tab.MessageFragment; import com.example.tab.MineFragment;  public class MainActivity extends AppCompatActivity implements View.OnClickListener{      private final Fragment messageFragment = new MessageFragment();      private final Fragment bookFragment = new BookFragment();      private final Fragment mineFragment = new MineFragment();     private FragmentManager fragmentManager;     private LinearLayout messageLayout,bookLayout,mineLayout;     @Override     protected void onCreate(@Nullable Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);         messageLayout = findViewById(R.id.messageLayout);         bookLayout = findViewById(R.id.bookLayout);         mineLayout = findViewById(R.id.mineLayout);         messageLayout.setOnClickListener(this);         bookLayout.setOnClickListener(this);         mineLayout.setOnClickListener(this);         initFragment();      }      private void initFragment(){         fragmentManager = getSupportFragmentManager();         FragmentTransaction transaction=fragmentManager.beginTransaction();         messageLayout.setBackgroundColor(Color.parseColor("#C1C1C1"));         bookLayout.setBackgroundColor(Color.parseColor("#C1C1C1"));         mineLayout.setBackgroundColor(Color.parseColor("#C1C1C1"));         transaction.add(R.id.frame_content,messageFragment);         transaction.add(R.id.frame_content,bookFragment);         transaction.add(R.id.frame_content,mineFragment);         transaction.hide(bookFragment);         transaction.hide(mineFragment);         transaction.commit();     }      private void background(View v) {         switch (v.getId()) {             case R.id.messageLayout:                 messageLayout.setBackgroundColor(Color.parseColor("#007FFF"));                 break;             case R.id.bookLayout:                 bookLayout.setBackgroundColor(Color.parseColor("#007FFF"));                 break;             case R.id.mineLayout:                 mineLayout.setBackgroundColor(Color.parseColor("#007FFF"));                 break;             default:                 break;         }     }      private void backgroundReturn(View v) {         switch (v.getId()) {             case R.id.messageLayout:                 messageLayout.setBackgroundColor(Color.parseColor("#C1C1C1"));                 break;             case R.id.bookLayout:                 bookLayout.setBackgroundColor(Color.parseColor("#C1C1C1"));                 break;             case R.id.mineLayout:                 mineLayout.setBackgroundColor(Color.parseColor("#C1C1C1"));                 break;             default:                 break;         }     }      private void hideFragment(FragmentTransaction transaction){         transaction.hide(messageFragment);         transaction.hide(bookFragment);         transaction.hide(mineFragment);     }      private void showFragment(int i) {          FragmentTransaction transaction=fragmentManager.beginTransaction();         hideFragment(transaction);         switch (i){             case 0:                 transaction.show(messageFragment);                 background(messageLayout);                 backgroundReturn(bookLayout);                 backgroundReturn(mineLayout);                 break;             case 1:                 transaction.show(bookFragment);                 background(bookLayout);                 backgroundReturn(messageLayout);                 backgroundReturn(mineLayout);                 break;             case 2:                 transaction.show(mineFragment);                 background(mineLayout);                 backgroundReturn(messageLayout);                 backgroundReturn(bookLayout);                 break;             default:                 break;         }         transaction.commit();     }       @Override     public void onClick(View view) {         switch (view.getId()){             case R.id.messageLayout:                 showFragment(0);                 break;             case R.id.bookLayout:                 showFragment(1);                 break;             case R.id.mineLayout:                 showFragment(2);                 break;             default:                 break;         }     } } 

大功告成.

三、Gitee源码

想要源代码的自行下载,博主免费提供: Android Studio实现底部导航栏Tab切换

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!