我需要使用这两个元素,这就是我目前拥有的:
<?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>
我的问题是BottomNavigationView
在NavigationView
的前面,情况并非如此(我在谈论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 中的帧布局>一个活动保持底部导航视图