Android开发中带有消息的底部导航栏的实现(记录一下)

效果图如下:

三个重要文件,activity_main.xml主布局文件,MainActivity.java,自定义Fragment类MyFragment.java。

1、activity_main.xml的代码如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@color/bg_white"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <RelativeLayout
        android:id="@+id/main_rLayoutTitle"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_alignParentTop="true"
        android:background="@color/bg_topbar">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="信息"
            android:textSize="18dp"
            android:gravity="center"
            android:layout_centerInParent="true"/>

        <View
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:background="@color/div_white"
            android:layout_alignParentBottom="true"></View>

    </RelativeLayout>

    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="@color/div_white"
        android:layout_above="@+id/main_lLayoutTabMenu"></View>

    <LinearLayout
        android:id="@+id/main_lLayoutTabMenu"
        android:layout_width="match_parent"
        android:layout_height="55dp"
        android:orientation="horizontal"
        android:layout_alignParentBottom="true">

        <RelativeLayout
            android:id="@+id/main_rLayoutTabMenuItemChannel"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1">

            <TextView
                android:id="@+id/main_tvTabMenuItemChannel"
                style="@style/TabMenuItem"
                android:text="提示"
                android:layout_centerInParent="true"
                android:drawableTop="@drawable/tab_menu_channel"
                />

            <TextView
                android:id="@+id/main_tvTabMenuItemChannelNum"
                style="@style/tab_menu_bgnum"
                android:layout_toRightOf="@+id/main_tvTabMenuItemChannel"
                android:text="99+"
                android:visibility="gone"/>

        </RelativeLayout>

        <RelativeLayout
            android:id="@+id/main_rLayoutTabMenuItemMessage"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1">

            <TextView
                android:id="@+id/main_tvTabMenuItemMessage"
                style="@style/TabMenuItem"
                android:text="信息"
                android:layout_centerInParent="true"
                android:drawableTop="@drawable/tab_menu_message"
                />

            <TextView
                android:id="@+id/main_tvTabMenuItemMessageNum"
                style="@style/tab_menu_bgnum"
                android:layout_toRightOf="@+id/main_tvTabMenuItemMessage"
                android:text="99+"
                android:visibility="gone"/>

        </RelativeLayout>

        <RelativeLayout
            android:id="@+id/main_rLayoutTabMenuItemBetter"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1">

            <TextView
                android:id="@+id/main_tvTabMenuItemBetter"
                style="@style/TabMenuItem"
                android:text="更多"
                android:layout_centerInParent="true"
                android:drawableTop="@drawable/tab_menu_better"
                />

            <TextView
                android:id="@+id/main_tvTabMenuItemBetterNum"
                style="@style/tab_menu_bgnum"
                android:layout_toRightOf="@+id/main_tvTabMenuItemBetter"
                android:text="99+"
                android:visibility="gone"/>

        </RelativeLayout>

        <RelativeLayout
            android:id="@+id/main_rLayoutTabMenuItemMy"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1">

            <TextView
                android:id="@+id/main_tvTabMenuItemMy"
                style="@style/TabMenuItem"
                android:text="我的"
                android:layout_centerInParent="true"
                android:drawableTop="@drawable/tab_menu_my"
                />

            <TextView
                android:id="@+id/main_tvTabMenuItemMyNum"
                style="@style/tab_menu_bgnum"
                android:layout_toRightOf="@+id/main_tvTabMenuItemMy"
                android:text="99+"
                android:visibility="gone"/>

        </RelativeLayout>

    </LinearLayout>

    <FrameLayout
        android:id="@+id/main_fLayoutContent"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@id/main_lLayoutTabMenu"
        android:layout_below="@id/main_rLayoutTitle"/>

</RelativeLayout>

其中的,styles.xml文件代码如下:

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

    <style name="tab_menu_bgnum">
        <item name="android:layout_width">20dp</item>
        <item name="android:layout_height">20dp</item>
        <item name="android:background">@mipmap/bg_num</item>
        <item name="android:layout_marginLeft">-10dp</item>
        <item name="android:textSize">12sp</item>
        <item name="android:gravity">center</item>
        <item name="android:textColor">@color/text_white</item>
    </style>

    <style name="TabMenuItem">
        <item name="android:layout_marginTop">5dp</item>
        <item name="android:layout_width">wrap_content</item>
        <item name="android:layout_height">48dp</item>
        <item name="android:layout_centerInParent">true</item>
        <item name="android:gravity">center_horizontal</item>
        <item name="android:textColor">@drawable/tab_menu_text</item>
    </style>

</resources>

2、MainActivity.java的代码如下:

package com.deepreality.fragmentcasetwodemo;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private RelativeLayout rLayoutTabMenuChannel, rLayoutTabMenuMessage, rLayoutTabMenuBetter, rLayoutTabMenuMy;
    private FrameLayout fLayoutContent;
    private TextView tvTabMenuChannel, tvTabMenuChannelNum, tvTabMenuMessage, tvTabMenuMessageNum, tvTabMenuBetter,
            tvTabMenuBetterNum, tvTabMenuMy, tvTabMenuMyNum;

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

        bindView();
        getFragmentManager().beginTransaction().add(R.id.main_fLayoutContent, new MyFragment()).commit();
    }

    private void bindView() {
        rLayoutTabMenuChannel = findViewById(R.id.main_rLayoutTabMenuItemChannel);
        rLayoutTabMenuMessage = findViewById(R.id.main_rLayoutTabMenuItemMessage);
        rLayoutTabMenuBetter = findViewById(R.id.main_rLayoutTabMenuItemBetter);
        rLayoutTabMenuMy = findViewById(R.id.main_rLayoutTabMenuItemMy);
        fLayoutContent = findViewById(R.id.main_fLayoutContent);
        tvTabMenuChannel = findViewById(R.id.main_tvTabMenuItemChannel);
        tvTabMenuChannelNum = findViewById(R.id.main_tvTabMenuItemChannelNum);
        tvTabMenuMessage = findViewById(R.id.main_tvTabMenuItemMessage);
        tvTabMenuMessageNum = findViewById(R.id.main_tvTabMenuItemMessageNum);
        tvTabMenuBetter = findViewById(R.id.main_tvTabMenuItemBetter);
        tvTabMenuBetterNum = findViewById(R.id.main_tvTabMenuItemBetterNum);
        tvTabMenuMy = findViewById(R.id.main_tvTabMenuItemMy);
        tvTabMenuMyNum = findViewById(R.id.main_tvTabMenuItemMyNum);

        rLayoutTabMenuChannel.setOnClickListener(this);
        rLayoutTabMenuMessage.setOnClickListener(this);
        rLayoutTabMenuBetter.setOnClickListener(this);
        rLayoutTabMenuMy.setOnClickListener(this);
    }

    private void resetSelected() {
        tvTabMenuChannel.setSelected(false);
        tvTabMenuMessage.setSelected(false);
        tvTabMenuBetter.setSelected(false);
        tvTabMenuMy.setSelected(false);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.main_rLayoutTabMenuItemChannel:{
                resetSelected();
                tvTabMenuChannel.setSelected(true);
                Toast.makeText(MainActivity.this, tvTabMenuChannelNum.getText(), Toast.LENGTH_SHORT).show();
                tvTabMenuChannelNum.setVisibility(View.GONE);
                tvTabMenuChannelNum.setText("0");
                break;
            }
            case R.id.main_rLayoutTabMenuItemMessage:{
                resetSelected();
                tvTabMenuMessage.setSelected(true);
                Toast.makeText(MainActivity.this, tvTabMenuMessageNum.getText(), Toast.LENGTH_SHORT).show();
                tvTabMenuMessageNum.setVisibility(View.GONE);
                tvTabMenuMessageNum.setText("0");
                break;
            }
            case R.id.main_rLayoutTabMenuItemBetter:{
                resetSelected();
                tvTabMenuBetter.setSelected(true);
                Toast.makeText(MainActivity.this, tvTabMenuBetterNum.getText(), Toast.LENGTH_SHORT).show();
                tvTabMenuBetterNum.setVisibility(View.GONE);
                tvTabMenuBetterNum.setText("0");
                break;
            }
            case R.id.main_rLayoutTabMenuItemMy:{
                resetSelected();
                tvTabMenuMy.setSelected(true);
                Toast.makeText(MainActivity.this, tvTabMenuMyNum.getText(), Toast.LENGTH_SHORT).show();
                tvTabMenuMyNum.setVisibility(View.GONE);
                tvTabMenuMyNum.setText("0");
                break;
            }
            default:break;
        }
    }
}

3、MyFragment.java的代码如下:

package com.deepreality.fragmentcasetwodemo;

import android.app.Fragment;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;

public class MyFragment extends Fragment implements View.OnClickListener {

    private Context mContext;
    private Button btn_one;
    private Button btn_two;
    private Button btn_three;
    private Button btn_four;

    public MyFragment() {

    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fg_my, container, false);
        btn_one = view.findViewById(R.id.btn_one);
        btn_two = (Button) view.findViewById(R.id.btn_two);
        btn_three = (Button) view.findViewById(R.id.btn_three);
        btn_four = (Button) view.findViewById(R.id.btn_four);
        //Bind Event
        btn_one.setOnClickListener(this);
        btn_two.setOnClickListener(this);
        btn_three.setOnClickListener(this);
        btn_four.setOnClickListener(this);
        return view;
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn_one:{
                TextView textView = getActivity().findViewById(R.id.main_tvTabMenuItemChannelNum);
                textView.setText("11");
                textView.setVisibility(View.VISIBLE);
                break;
            }
            case R.id.btn_two:{
                TextView textView = getActivity().findViewById(R.id.main_tvTabMenuItemMessageNum);
                textView.setText("22");
                textView.setVisibility(View.VISIBLE);
                break;
            }
            case R.id.btn_three:{
                TextView textView = getActivity().findViewById(R.id.main_tvTabMenuItemBetterNum);
                textView.setText("33");
                textView.setVisibility(View.VISIBLE);
                break;
            }
            case R.id.btn_four:{
                TextView textView = getActivity().findViewById(R.id.main_tvTabMenuItemMyNum);
                textView.setText("55");
                textView.setVisibility(View.VISIBLE);
                break;
            }
            default:break;
        }
    }
}
完整demo地址: https://download.csdn.net/download/lpcrazyboy/10514101

猜你喜欢

转载自blog.csdn.net/lpcrazyboy/article/details/80886487