Android 底部导航栏以及导航栏角标显示,使用LinearLayout+Fragment实现

Android 底部导航栏以及角标显示,使用LinearLayout+Fragment实现
1、自定义按钮控件2、自定义底部栏3、使用

看过网上很多大神写的关于底部导航栏的实现方式,但是总感觉用的不是那么随意,作为一个专业的出色的自学者,要借鉴大神的,实现自己的,有何不足之处,欢迎大家批评指正。
特点:可以自由设置每个底部栏按钮的样式,大小
MyBottomForLinearLayout中的setMarkerNum方法设置角标
如:bottomForLinearLayout.setMarkerNum(5,122);
5是导航栏第几个按钮,122是设置的数字,超过99显示99

Android 底部导航栏以及导航栏角标显示,使用LinearLayout+Fragment实现
Android 底部导航栏以及导航栏角标显示,使用LinearLayout+Fragment实现

1、自定义按钮控件

Xml界面 my_image_and_text_layout.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<RelativeLayout
android:id="@+id/my_image_and_text_image_rala"
android:layout_width="30dp"
android:layout_height="30dp">
<ImageView
android:id="@+id/my_image_and_text_iamge"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@mipmap/left"
android:scaleType="fitCenter"
android:padding="3dp"
/>
<RelativeLayout
android:id="@+id/my_image_and_text_iamges_marker_rala"
android:layout_width="15dp"
android:layout_height="15dp"
android:layout_alignParentEnd="true"
>
<ImageView
android:id="@+id/my_image_and_text_iamges_marker_iamge"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@mipmap/jiao_biao"
/>
<TextView
android:id="@+id/my_image_and_text_iamges_marker_rala_num"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:textColor="#fff"
android:ellipsize="end"
android:lines="1"
android:maxLength="2"
android:textSize="10sp" />
</RelativeLayout>
</RelativeLayout>

<TextView
android:id="@+id/my_image_and_text_bottom_text"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:textSize="9sp"
android:text="测试中"
android:ellipsize="end"
android:lines="1"
/>

</LinearLayout>

逻辑代码 MyImageTextShow.

import android.annotation.SuppressLint;
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;

import androidx.annotation.NonNull;

import com.mylib.mystyle.R;

import erp.mylib.myutils.data.MyString;

/**
* 图片加文字展示
* 上面是图片,下面是文字
*
*/

public class MyImageTextShow extends RelativeLayout{

private RelativeLayout mRlImages,mRlMaker;
private ImageView mIvImage,mIvMarker;
private TextView mTvMarker,mTvBottom;

public MyImageTextShow(@NonNull Context context, AttributeSet attrs) {
super(context, attrs);
LayoutInflater.from(context).inflate(R.layout.my_image_and_text_layout, this);

mRlImages = findViewById(R.id.my_image_and_text_image_rala);
mRlMaker = findViewById(R.id.my_image_and_text_iamges_marker_rala);
mIvImage = findViewById(R.id.my_image_and_text_iamge);
mIvMarker = findViewById(R.id.my_image_and_text_iamges_marker_iamge);
mTvMarker = findViewById(R.id.my_image_and_text_iamges_marker_rala_num);
mTvBottom = findViewById(R.id.my_image_and_text_bottom_text);
mRlMaker.setVisibility(GONE);
}

/**
* 设置角标数字
* @param num 数量
*/
@SuppressLint("SetTextI18n")
public void setMakerNum(int num) {

if (num>0) {
mRlMaker.setVisibility(VISIBLE);
if (num<100) mTvMarker.setText(String.valueOf(num));
else mTvMarker.setText("99+");
}
else mRlMaker.setVisibility(GONE);
}

/**
* 设置角标尺寸
* @param w 宽
* @param h 高
*/
public void setMarkerSize(int w,int h) {
ViewGroup.LayoutParams pp = mRlMaker.getLayoutParams();
mRlMaker.getLayoutParams();
pp.height = h;
pp.width = w;
mRlMaker.setLayoutParams(pp);
}

/**
* 设置底图尺寸
* @param w 宽
* @param h 高
*/
public void setImageSize(int w,int h) {
ViewGroup.LayoutParams pp = mRlImages.getLayoutParams();
mRlImages.getLayoutParams();
pp.height = h;
pp.width = w;
mRlImages.setLayoutParams(pp);
}

public RelativeLayout getmRlImages() {
return mRlImages;
}

public void setmRlImages(RelativeLayout mRlImages) {
this.mRlImages = mRlImages;
}

public RelativeLayout getmRlMaker() {
return mRlMaker;
}

public void setmRlMaker(RelativeLayout mRlMaker) {
this.mRlMaker = mRlMaker;
}

public ImageView getmIvImage() {
return mIvImage;
}

public void setmIvImage(ImageView mIvImage) {
this.mIvImage = mIvImage;
}

public ImageView getmIvMarker() {
return mIvMarker;
}

public void setmIvMarker(ImageView mIvMarker) {
this.mIvMarker = mIvMarker;
}

public TextView getmTvMarker() {
return mTvMarker;
}

public void setmTvMarker(TextView mTvMarker) {
this.mTvMarker = mTvMarker;
}

public TextView getmTvBottom() {
return mTvBottom;
}

public void setmTvBottom(TextView mTvBottom) {
this.mTvBottom = mTvBottom;
}

}

2、自定义底部栏

xml代码 my_bttom_for_linear_layout

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="3dp"
>

<erp.mylib.mystyle.from.MyImageTextShow
android:id="@+id/my_buttom_for_linear_layout_1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_gravity="center"
android:layout_weight="1"
/>
<erp.mylib.mystyle.from.MyImageTextShow
android:id="@+id/my_buttom_for_linear_layout_2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_gravity="center"
android:layout_weight="1"
/>
<erp.mylib.mystyle.from.MyImageTextShow
android:id="@+id/my_buttom_for_linear_layout_3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_gravity="center"
android:layout_weight="1"
/>
<erp.mylib.mystyle.from.MyImageTextShow
android:id="@+id/my_buttom_for_linear_layout_4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_gravity="center"
android:layout_weight="1"
/>
<erp.mylib.mystyle.from.MyImageTextShow
android:id="@+id/my_buttom_for_linear_layout_6"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_gravity="center"
android:layout_weight="1"
/>
<erp.mylib.mystyle.from.MyImageTextShow
android:id="@+id/my_buttom_for_linear_layout_7"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_gravity="center"
android:layout_weight="1"
/>
<erp.mylib.mystyle.from.MyImageTextShow
android:id="@+id/my_buttom_for_linear_layout_8"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_gravity="center"
android:layout_weight="1"
/>
<erp.mylib.mystyle.from.MyImageTextShow
android:id="@+id/my_buttom_for_linear_layout_5"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_gravity="center"
android:layout_weight="1"
/>

</LinearLayout>

逻辑代码 MyBottomForLinearLayout
LogUtil 自定义的日志文件管理,替换城自己的或者替换为系统的都可以

import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import com.mylib.mystyle.R;
import java.util.ArrayList;
import erp.mylib.myutils.sys.LogUtil;

/**
* 底部菜单,由LinearLayout实现
* 我这里弄了8个按钮,在avtivity页面传几个参数就显示几个
*/

public class MyBottomForLinearLayout extends LinearLayout{
MyImageTextShow mBtm1;
MyImageTextShow mBtm2;
MyImageTextShow mBtm3;
MyImageTextShow mBtm4;
MyImageTextShow mBtm5;
MyImageTextShow mBtm6;
MyImageTextShow mBtm7;
MyImageTextShow mBtm8;
MyImageTextShow oldBtm;
private int oldColor;//未选中颜色
private int selectColor;//选中颜色
private int oldImageId;//前一个按钮id

public MyBottomForLinearLayout(@NonNull Context context, AttributeSet attrs) {
super(context, attrs);
LayoutInflater.from(context).inflate(R.layout.my_bttom_for_linear_layout, this);
mBtm1 = findViewById(R.id.my_buttom_for_linear_layout_1);
mBtm2 = findViewById(R.id.my_buttom_for_linear_layout_2);
mBtm3 = findViewById(R.id.my_buttom_for_linear_layout_3);
mBtm4 = findViewById(R.id.my_buttom_for_linear_layout_4);
mBtm5 = findViewById(R.id.my_buttom_for_linear_layout_5);
mBtm6 = findViewById(R.id.my_buttom_for_linear_layout_6);
mBtm7 = findViewById(R.id.my_buttom_for_linear_layout_7);
mBtm8 = findViewById(R.id.my_buttom_for_linear_layout_8);
mBtm1.setVisibility(GONE);
mBtm2.setVisibility(GONE);
mBtm3.setVisibility(GONE);
mBtm4.setVisibility(GONE);
mBtm5.setVisibility(GONE);
mBtm6.setVisibility(GONE);
mBtm7.setVisibility(GONE);
mBtm8.setVisibility(GONE);
}

/**
* 设置文字选中后和未选中颜色
* @param oldColor 未选中颜色
* @param clickColor 选中颜色
*/
public void setTextClolor(int oldColor,int clickColor){
this.oldColor = oldColor;
this.selectColor = clickColor;
}

//**********************设置未选中时图片,选中时图片、文字、点击事件属性***************************
//**********************需要几个按钮再ACTIVITY页面就设置几个***************************
public void setBottom1OnClick(int oldId, int nowId,String text,OnClickListener listener){
setBottomProPerty(mBtm1,oldId,nowId,text,listener);
}
public void setBottom2OnClick(int oldId, int nowId,String text,OnClickListener listener){
setBottomProPerty(mBtm2,oldId,nowId,text,listener);
}
public void setBottom3OnClick(int oldId, int nowId,String text,OnClickListener listener){
setBottomProPerty(mBtm3,oldId,nowId,text,listener);
}
public void setBottom4OnClick(int oldId, int nowId,String text,OnClickListener listener){
setBottomProPerty(mBtm4,oldId,nowId,text,listener);
}
public void setBottom5OnClick(int oldId, int nowId,String text,OnClickListener listener){
setBottomProPerty(mBtm5,oldId,nowId,text,listener);
}
public void setBottom6OnClick(int oldId, int nowId,String text,OnClickListener listener){
setBottomProPerty(mBtm6,oldId,nowId,text,listener);
}
public void setBottom7OnClick(int oldId, int nowId,String text,OnClickListener listener){
setBottomProPerty(mBtm7,oldId,nowId,text,listener);
}
public void setBottom8OnClick(int oldId, int nowId,String text,OnClickListener listener){
setBottomProPerty(mBtm8,oldId,nowId,text,listener);
}

/**
* 设置图片宽高
* @param w 宽度
* @param h 高度
*/
public void setImageSize(int w,int h){
for (int i =0;i<this.getChildCount(); i++){
if (this.getChildAt(i) instanceof MyImageTextShow){
MyImageTextShow imageTextShow = (MyImageTextShow) this.getChildAt(i);
imageTextShow.setImageSize(w,h);
}
}
}

/**
* 设置角标宽高
* @param w 宽度
* @param h 高度
*/
public void setMarkerSize(int w,int h){
for (int i =0;i<this.getChildCount(); i++){
if (this.getChildAt(i) instanceof MyImageTextShow){
MyImageTextShow imageTextShow = (MyImageTextShow) this.getChildAt(i);
imageTextShow.setMarkerSize(w,h);
}
}
}

/**
* 批量创建底部按钮
* ArrayList<myBottom>
* @param myBottoms 内部类myBottom数组
*/
public void setMyBottoms(ArrayList<myBottom> myBottoms){
if (!checkMyBottomS(myBottoms)) LogUtil.d("存在一个或多个按钮未设置图片或点击事件,将显示原始值");
if (myBottoms.size()>getChildCount()) LogUtil.d("传入控件过多,将只显示前"+getChildCount()+"个控件");
switch (myBottoms.size()){
case 8:
setBottom8OnClick(myBottoms.get(7).imaged,
myBottoms.get(7).selectId,
myBottoms.get(7).text,
myBottoms.get(7).listener);
case 7:
setBottom7OnClick(myBottoms.get(6).imaged,
myBottoms.get(6).selectId,
myBottoms.get(6).text,
myBottoms.get(6).listener);
case 6:
setBottom6OnClick(myBottoms.get(5).imaged,
myBottoms.get(5).selectId,
myBottoms.get(5).text,
myBottoms.get(5).listener);
case 5:
setBottom5OnClick(myBottoms.get(4).imaged,
myBottoms.get(4).selectId,
myBottoms.get(4).text,
myBottoms.get(4).listener);
case 4:
setBottom4OnClick(myBottoms.get(3).imaged,
myBottoms.get(3).selectId,
myBottoms.get(3).text,
myBottoms.get(3).listener);
case 3:
setBottom3OnClick(myBottoms.get(2).imaged,
myBottoms.get(2).selectId,
myBottoms.get(2).text,
myBottoms.get(2).listener);
case 2:
setBottom2OnClick(myBottoms.get(1).imaged,
myBottoms.get(1).selectId,
myBottoms.get(1).text,
myBottoms.get(1).listener);
case 1:
setBottom1OnClick(myBottoms.get(0).imaged,
myBottoms.get(0).selectId,
myBottoms.get(0).text,
myBottoms.get(0).listener);
}
}

/**
* 设置角标数字
* @param id 按钮序号(从左到右从1开始)
* @param num 角标数字
*/
public void setMarkerNum(int id, int num){
switch (id){
case 1:
mBtm1.setMakerNum(num);
break;
case 2:
mBtm2.setMakerNum(num);
break;
case 3:
mBtm3.setMakerNum(num);
break;
case 4:
mBtm4.setMakerNum(num);
break;
case 5:
mBtm5.setMakerNum(num);
break;
case 6:
mBtm6.setMakerNum(num);
break;
case 7:
mBtm7.setMakerNum(num);
break;
case 8:
mBtm8.setMakerNum(num);
break;
}
}

/**
* 按钮初始化,及点击事件处理逻辑
* @param imageTextShow 自定义图片加文字控件
* @param oldId 加载图片ID
* @param nowId 选中图片ID
* @param text 文字
* @param listener 点击事件
*/
private void setBottomProPerty(final MyImageTextShow imageTextShow, final int oldId, final int nowId,String text, final OnClickListener listener){
if (!checkInit()) return;
if (imageTextShow != null) imageTextShow.setVisibility(VISIBLE);
if (oldId != 0) imageTextShow.getmIvImage().setImageResource(oldId);
if (oldColor != 0) imageTextShow.getmTvBottom().setTextColor(oldColor);
if (text != null) imageTextShow.getmTvBottom().setText(text);
if (imageTextShow != null){
imageTextShow.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
if (oldBtm != null && imageTextShow == oldBtm) return;
if (oldBtm != null && imageTextShow != oldBtm) setOldBtmType();
oldBtm = imageTextShow;
oldImageId = oldId;
imageTextShow.getmIvImage().setImageResource(nowId);
imageTextShow.getmTvBottom().setTextColor(selectColor);
if (listener != null) listener.onClick(view);

}
});
}
}

/**
* 切换选中状态
*/
private void setOldBtmType(){
if (oldBtm != null){
oldBtm.getmIvImage().setImageResource(oldImageId);
oldBtm.getmTvBottom().setTextColor(oldColor);
}
}

/**
* 检查数组
* @param myBottoms 内部类
* @return 布尔值
*/
private boolean checkMyBottomS(ArrayList<myBottom> myBottoms){
for (myBottom s:myBottoms){
if (s.imaged == 0 || s.selectId == 0 || s.listener == null){
return false;
}
}
return true;
}

/**
* 初始化检查是否传入文字颜色
* @return 布尔值
*/
private boolean checkInit(){
if (oldColor == 0 || selectColor == 0) {
LogUtil.d("请先设置字体颜色");
return false;
}
return true;
}

//*****************GET,SET方法,用于设置每个控件的详细属性*******************
//*****************用来设置每个底部按钮的样式属性*******************

public MyImageTextShow getmBtm1() {
return mBtm1;
}
public void setmBtm1(MyImageTextShow mBtm1) {
this.mBtm1 = mBtm1;
}

public MyImageTextShow getmBtm2() {
return mBtm2;
}
public void setmBtm2(MyImageTextShow mBtm2) {
this.mBtm2 = mBtm2;
}

public MyImageTextShow getmBtm3() {
return mBtm3;
}
public void setmBtm3(MyImageTextShow mBtm3) {
this.mBtm3 = mBtm3;
}

public MyImageTextShow getmBtm4() {
return mBtm4;
}
public void setmBtm4(MyImageTextShow mBtm4) {
this.mBtm4 = mBtm4;
}

public MyImageTextShow getmBtm5() {
return mBtm5;
}
public void setmBtm5(MyImageTextShow mBtm5) {
this.mBtm5 = mBtm5;
}

public MyImageTextShow getmBtm6() {
return mBtm6;
}
public void setmBtm6(MyImageTextShow mBtm6) {
this.mBtm6 = mBtm6;
}

public MyImageTextShow getmBtm7() {
return mBtm7;
}
public void setmBtm7(MyImageTextShow mBtm7) {
this.mBtm7 = mBtm7;
}

public MyImageTextShow getmBtm8() {
return mBtm8;
}
public void setmBtm8(MyImageTextShow mBtm8) {
this.mBtm8 = mBtm8;
}

public static class myBottom{
public int imaged;
public String text;
public int selectId;
public OnClickListener listener;
}

}

3、使用

逻辑代码 activity_start_expense

<?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"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
tools:context="erp.expense.StartExpenseActivity">
<FrameLayout
android:id="@+id/start_activity_framelayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/start_activity_mylayout"
/>
<erp.mylib.mystyle.from.MyBottomForLinearLayout
android:id="@+id/start_activity_mylayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="@color/color_recycle_rectangle"
/>
</RelativeLayout>

逻辑代码 StartExpenseActivity.
ToastUtil 是自定义的弹出窗口,使用系统的替换即可
自定义代码部分就不贴了,很简单的几个个Fragment

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.FrameLayout;
import com.rfid.R;
import java.util.ArrayList;
import erp.mylib.mystyle.from.MyBottomForLinearLayout;
import erp.mylib.myutils.sys.ToastUtil;
import erp.rfid.MyFragment.BottomFragmentForApproval;
import erp.rfid.MyFragment.BottomFragmentForIndex;
import erp.rfid.MyFragment.BottomFragmentForInformation;
import erp.rfid.MyFragment.BottomFragmentForInstall;
import erp.rfid.MyFragment.BottomFragmentForMy;
import erp.works.StartWorksActivity;

public class StartExpenseActivity extends AppCompatActivity{
MyBottomForLinearLayout bottomForLinearLayout;

//自定义fragment
BottomFragmentForIndex index;
BottomFragmentForInformation information;
BottomFragmentForInstall install;
BottomFragmentForMy my;
BottomFragmentForApproval approval;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_start_expense);

initFragment();//初始化自定义Fragment页面
getSupportFragmentManager().beginTransaction().add(R.id.start_activity_framelayout,index).commitNowAllowingStateLoss();
initBottom();//初始化底部栏
}

/**
* 初始化自定义Fragment页面(需要用个人的,这里就不贴了)
*/
private void initFragment(){
index = new BottomFragmentForIndex();
information = new BottomFragmentForInformation();
install = new BottomFragmentForInstall();
my = new BottomFragmentForMy();
approval = new BottomFragmentForApproval();
}

/**
* 加载底部栏
*/
private void initBottom(){
bottomForLinearLayout = findViewById(R.id.start_activity_mylayout);
bottomForLinearLayout.setImageSize(30,30);
bottomForLinearLayout.setTextClolor(R.color.color_main_button_background,R.color.color_rfid_edittext_value);
bottomForLinearLayout.setMyBottoms(loadBittomProperty());
}

/**
* 设置显示的按钮
* @return
*/
private ArrayList<MyBottomForLinearLayout.myBottom> loadBittomProperty(){
ArrayList<MyBottomForLinearLayout.myBottom> myBottoms = new ArrayList<>();
MyBottomForLinearLayout.myBottom ee = new MyBottomForLinearLayout.myBottom();
ee.imaged = R.mipmap.fragment_index_after;
ee.selectId = R.mipmap.fragment_index_before;
ee.text = "测试1";
ee.listener = new View.OnClickListener() {
@Override
public void onClick(View view) {
getSupportFragmentManager().beginTransaction().replace(R.id.start_activity_framelayout,index).commitNowAllowingStateLoss();
}
};
myBottoms.add(ee);
MyBottomForLinearLayout.myBottom a1 = new MyBottomForLinearLayout.myBottom();
a1.imaged = R.mipmap.fragment_information_before;
a1.selectId = R.mipmap.fragment_information_after;
a1.text = "测试2";
a1.listener = new View.OnClickListener() {
@Override
public void onClick(View view) {
getSupportFragmentManager().beginTransaction().replace(R.id.start_activity_framelayout,information).commitNowAllowingStateLoss();
}
};
myBottoms.add(a1);
MyBottomForLinearLayout.myBottom a2 = new MyBottomForLinearLayout.myBottom();
a2.imaged = R.mipmap.fragment_install_after;
a2.selectId = R.mipmap.fragment_install_before;
a2.text = "测试3";
a2.listener = new View.OnClickListener() {
@Override
public void onClick(View view) {
getSupportFragmentManager().beginTransaction().replace(R.id.start_activity_framelayout,install).commitNowAllowingStateLoss();
}
};
myBottoms.add(a2);
MyBottomForLinearLayout.myBottom a3 = new MyBottomForLinearLayout.myBottom();
a3.imaged = R.mipmap.fragment_my_before;
a3.selectId = R.mipmap.fragment_my_after;
a3.text = "测试4";
a3.listener = new View.OnClickListener() {
@Override
public void onClick(View view) {
getSupportFragmentManager().beginTransaction().replace(R.id.start_activity_framelayout,my).commitNowAllowingStateLoss();
}
};
myBottoms.add(a3);
MyBottomForLinearLayout.myBottom a4 = new MyBottomForLinearLayout.myBottom();
a4.imaged = R.mipmap.fragment_install_after;
a4.selectId = R.mipmap.fragment_install_before;
a4.text = "测试5";
a4.listener = new View.OnClickListener() {
@Override
public void onClick(View view) {
getSupportFragmentManager().beginTransaction().replace(R.id.start_activity_framelayout,approval).commitNowAllowingStateLoss();
}
};
myBottoms.add(a4);
return myBottoms;
}
}

以上内容是看过很多大神写的关于底部导航栏实现的思想,根据个人需求一行一行写出。
欢迎各位看官指出不足之处
如果你感觉对自己有些帮助,请动动小手点个赞👍

原创:https://www.panoramacn.com
源码网提供WordPress源码,帝国CMS源码discuz源码,微信小程序,小说源码,杰奇源码,thinkphp源码,ecshop模板源码,微擎模板源码,dede源码,织梦源码等。

专业搭建小说网站,小说程序,杰奇系列,微信小说系列,app系列小说

Android 底部导航栏以及导航栏角标显示,使用LinearLayout+Fragment实现

免责声明,若由于商用引起版权纠纷,一切责任均由使用者承担。

您必须遵守我们的协议,如果您下载了该资源行为将被视为对《免责声明》全部内容的认可-> 联系客服 投诉资源
www.panoramacn.com资源全部来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。 敬请谅解! 侵权删帖/违法举报/投稿等事物联系邮箱:2640602276@qq.com
未经允许不得转载:书荒源码源码网每日更新网站源码模板! » Android 底部导航栏以及导航栏角标显示,使用LinearLayout+Fragment实现
关注我们小说电影免费看
关注我们,获取更多的全网素材资源,有趣有料!
120000+人已关注
分享到:
赞(0) 打赏

评论抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

您的打赏就是我分享的动力!

支付宝扫一扫打赏

微信扫一扫打赏