如何正确地组合导航视图和底部划分



我需要使用这两个元素,这就是我目前拥有的:

<?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">
    <android.support.v4.widget.DrawerLayout xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/drawer_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true"
        tools:openDrawer="start">
        <android.support.design.widget.NavigationView
            android:id="@+id/nav_view"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            android:fitsSystemWindows="true"
            app:headerLayout="@layout/nav_header_main"
            app:menu="@menu/activity_main_drawer" />
    </android.support.v4.widget.DrawerLayout>
    <android.support.design.widget.BottomNavigationView
        android:id="@+id/bottom_navigation_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:background="@color/colorAccent"
        app:menu="@menu/menu_bottom" />
</RelativeLayout>

我的问题是BottomNavigationViewNavigationView的前面,情况并非如此(我在谈论Y索引(。我还尝试使用CoordinatorLayout,但是BottomNavigationView被卡在显示屏的顶部。

我只需将 DrawerLayout用作根元素,在 DrawerLayout内部,您可以在包含主屏幕和菜单的NavigationView上放置一个布局。将底部纳维atviationView放入主布局之后。

<android.support.v4.widget.DrawerLayout xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:openDrawer="start">
    <include layout="@layout/maincontent"/>
    <android.support.design.widget.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        app:headerLayout="@layout/nav_header_main"
        app:menu="@menu/activity_main_drawer" />
</android.support.v4.widget.DrawerLayout>    

maincontent.xml

<FrameLayout..>
...
<android.support.design.widget.BottomNavigationView
    android:id="@+id/bottom_navigation_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:background="@color/colorAccent"
    app:menu="@menu/menu_bottom" />
</FrameLayout>    

在这里,此代码适合我

nav_header_home.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="@dimen/nav_header_height"
    android:gravity="bottom"
    android:orientation="vertical"
    android:background="@drawable/nav_header_background">
    <LinearLayout
        android:layout_alignParentBottom="true"
        android:orientation="vertical"
        android:padding="@dimen/activity_vertical_margin"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/nav_header_background">
        <de.hdodenhof.circleimageview.CircleImageView
            android:id="@+id/imageView"
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:paddingTop="@dimen/nav_header_vertical_spacing"
            app:civ_border_color="@color/white"
            app:civ_border_width="2dp" />
        <TextView
            android:id="@+id/login_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingTop="@dimen/nav_header_vertical_spacing"
            android:text=""
            android:textAppearance="@style/TextAppearance.AppCompat.Body1"
            android:textColor="@color/white"
            android:textStyle="bold" />
        <TextView
            android:id="@+id/login_email_id"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text=""
            android:textColor="@color/white" />
    </LinearLayout>

</RelativeLayout>

activity_home.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout
    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:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:openDrawer="start">
    <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"
        tools:context=".MainActivity">
        <FrameLayout
            android:id="@+id/fragment_container"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_above="@+id/bottom_nav_view">
        </FrameLayout>
        <com.google.android.material.bottomnavigation.BottomNavigationView
            android:id="@+id/bottom_nav_view"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_marginStart="0dp"
            android:layout_marginEnd="0dp"
            android:background="@color/colorAccentDark"
            app:itemIconTint="@color/white"
            app:itemTextColor="@color/white"
            android:foregroundGravity="bottom"
            app:menu="@menu/bottom_nav_menu" />
    </RelativeLayout>
    <com.google.android.material.navigation.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        app:headerLayout="@layout/nav_header_home"
        app:menu="@menu/activity_home_drawer" />
</androidx.drawerlayout.widget.DrawerLayout>

现在最重要的Java文件

homeactivity.java

import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import com.blogspot.atifsoftwares.animatoolib.Animatoo;
import com.bumptech.glide.Glide;
import com.facebook.AccessToken;
import com.facebook.login.LoginManager;
import com.google.android.gms.auth.api.Auth;
import com.google.android.gms.auth.api.signin.GoogleSignInOptions;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.common.api.ResultCallback;
import com.google.android.gms.common.api.Status;
import com.google.android.material.bottomnavigation.BottomNavigationView;
import androidx.annotation.NonNull;
import androidx.core.view.GravityCompat;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.material.navigation.NavigationView;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import de.hdodenhof.circleimageview.CircleImageView;
public class HomeActivity extends AppCompatActivity
        implements NavigationView.OnNavigationItemSelectedListener, GoogleApiClient.OnConnectionFailedListener {
    private FirebaseAuth mAuth;
    GoogleApiClient mGoogleApiClient;
    GoogleSignInOptions gso;
    FirebaseUser user;
    TextView name3;
    TextView emailid;
    CircleImageView circleImageView;
    SharedPreferences sharedPreferences;
    SharedPreferences.Editor editor;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);
        BottomNavigationView navView = findViewById(R.id.bottom_nav_view);
        navView.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);


        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        NavigationView navigationView = findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);
        View header=navigationView.getHeaderView(0);
        mAuth = FirebaseAuth.getInstance();
        gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestEmail()
                .build();
        mGoogleApiClient = new GoogleApiClient.Builder(this)
                .enableAutoManage(this, this)
                .addApi(Auth.GOOGLE_SIGN_IN_API, gso).build();
        user = mAuth.getCurrentUser();
        name3=(TextView)header.findViewById(R.id.login_name);
        emailid=(TextView)header.findViewById(R.id.login_email_id);
        circleImageView=(CircleImageView) header.findViewById(R.id.imageView);
        sharedPreferences=getApplicationContext().getSharedPreferences("owl_pref",MODE_PRIVATE);
        editor=sharedPreferences.edit();
        editor.apply();
        if(sharedPreferences.getString("method","").equals("facebook")){
            emailid.setText(sharedPreferences.getString("login_mail",""));
            name3.setText(sharedPreferences.getString("login_name",""));
            String url=sharedPreferences.getString("login_profile_image","");
            Glide.with(this).load(url).placeholder(R.drawable.logo).override(124,124).into(circleImageView);
        }
        if(sharedPreferences.getString("method","").equals("google")){
            emailid.setText(sharedPreferences.getString("login_mail",""));
            name3.setText(sharedPreferences.getString("login_name",""));
            String url=sharedPreferences.getString("login_profile_image","");
            Glide.with(this).load(url).placeholder(R.drawable.logo).override(124,124).into(circleImageView);
        }
        if(sharedPreferences.getString("method","").equals("email")){
            emailid.setText(sharedPreferences.getString("login_mail",""));
            name3.setText(sharedPreferences.getString("login_name",""));
            //String url=sharedPreferences.getString("login_profile_image","");
            Glide.with(this).load(R.drawable.logo).override(124,124).into(circleImageView);
        }
        getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new FragmentHomeActivity()).commit();
    }
    private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
            = new BottomNavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            Fragment fragment = null;
            switch (item.getItemId()) {
                case R.id.navigation_home:
                    fragment = new FragmentHomeActivity();
                    break;
                case R.id.navigation_dashboard:
                    fragment = new FragmentDashboardActivity();
                    break;
                case R.id.navigation_star:
                    fragment = new FragmentRewardActivity();
                    break;
                case R.id.navigation_discuss:
                    fragment = new FragmentDiscussActivity();
                    break;
                case R.id.navigation_profile:
                    fragment = new FragmentProfileActivity();
                    break;
            }
            getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, fragment).commit();
            return true;
        }
    };

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the FragmentHomeActivity/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        //noinspection SimplifiableIfStatement
        if (id == R.id.action_search) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
    @SuppressWarnings("StatementWithEmptyBody")
    @Override
    public boolean onNavigationItemSelected(MenuItem item) {
        // Handle navigation view item clicks here.
        int id = item.getItemId();
        if (id == R.id.nav_home) {
            Intent intent=new Intent(HomeActivity.this,HomeActivity.class);
            startActivity(intent);
            showToast("Already in Home Section");
        } else if (id == R.id.nav_question_answer) {
            Intent intent=new Intent(HomeActivity.this,QuestionActivity.class);
            startActivity(intent);
        } else if (id == R.id.nav_upload) {
            Intent intent=new Intent(HomeActivity.this,UploadActivity.class);
            startActivity(intent);
            //Animatoo.animateFade(this);
        } else if (id == R.id.nav_logout) {
            signOut();
        }

        DrawerLayout drawer = findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }
    @Override
    public void onBackPressed() {
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        if (drawer.isDrawerOpen(GravityCompat.START)) {
            drawer.closeDrawer(GravityCompat.START);
        } else {
            super.onBackPressed();
        }
    }
    public void openDrawer() {
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.openDrawer(GravityCompat.START);
    }
    private void showToast(String message) {
        Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show();
    }
    @Override
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
    }
    private void signOut() {
        user = mAuth.getCurrentUser();
        editor.clear().commit();
        if (user != null) {
            mAuth.signOut();
            Log.d("owl","enter");
            Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback(new ResultCallback<Status>() {
                @Override
                public void onResult(@NonNull Status status) {
                    Toast.makeText(HomeActivity.this, "Signed Out", Toast.LENGTH_LONG).show();
                    Intent intent = new Intent(HomeActivity.this, LoginActivity.class);
                    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
                    startActivity(intent);
                }
            });
        }
        if (AccessToken.getCurrentAccessToken() != null && com.facebook.Profile.getCurrentProfile() != null) {
            LoginManager.getInstance().logOut();
            Intent intent = new Intent(HomeActivity.this, LoginActivity.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(intent);
        }
    }
}

现在
activity_home_drawer.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:showIn="navigation_view">
    <group android:checkableBehavior="single">
        <item
            android:id="@+id/nav_home"
            android:icon="@drawable/ic_home_black_24dp"
            android:title="@string/menu_home" />
        <item
            android:id="@+id/nav_question_answer"
            android:icon="@drawable/ic_question_answer_black_24dp"
            android:title="@string/menu_question_answer" />
        <item
            android:id="@+id/nav_upload"
            android:icon="@drawable/ic_cloud_upload_black_24dp"
            android:title="@string/menu_upload" />
        <item
            android:id="@+id/nav_logout"
            android:icon="@drawable/ic_exit_to_app_black_24dp"
            android:title="@string/menu_logout" />
    </group>
    <!--<item android:title="Extras">
        <menu>
            <item
                android:id="@+id/nav_pricing"
                android:icon="@drawable/ic_attach_money_black_24dp"
                android:title="@string/menu_pricing" />
        </menu>
    </item>-->
</menu>

bottom_nav_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/navigation_home"
        android:icon="@drawable/ic_home_black_24dp"
        android:title="@string/title_home">
    </item>
    <item
        android:id="@+id/navigation_dashboard"
        android:icon="@drawable/ic_dashboard_black_24dp"
        android:title="@string/title_dashboard">
    </item>
    <item
        android:id="@+id/navigation_star"
        android:icon="@drawable/ic_star_black_24dp"
        android:title="@string/title_star">
    </item>
    <item
        android:id="@+id/navigation_discuss"
        android:icon="@drawable/ic_chat_black_24dp"
        android:title="@string/title_discuss">
    </item>
    <item
        android:id="@+id/navigation_profile"
        android:icon="@drawable/ic_perm_identity_black_24dp"
        android:title="@string/title_profile">
    </item>
</menu>

主要是在抽屉布局中插入底部导航视图底部导航视图正在使用 activity_home.xml 中的帧布局>一个活动保持底部导航视图

最新更新