如何在android中添加自定义导航视图

knsnq2tg  于 2021-08-20  发布在  Java
关注(0)|答案(1)|浏览(384)

我已经创建了下面所附的布局,我没有使用任何抽屉布局或导航视图。顶部栏是使用工具栏标记创建的。现在,我想添加一个导航视图,一旦用户单击汉堡图标,该视图就会调用。它也应该可以从其他活动中访问

hl0ma9xz

hl0ma9xz1#

你应该使用导航抽屉。
您可以通过创建一个名为baseactivity的公共类并将导航抽屉的代码放在这个类中来实现这一点。并使用baseactivity扩展类/活动,在其中显示导航抽屉。

public class BaseActivity extends AppCompatActivity  {
 public Toolbar toolbar;                             
 ActionBarDrawerToggle mDrawerToggle;
 Context context;
 private NavigationView navigationView;
 private DrawerLayout drawerLayout;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
 }

 protected boolean useToolbar() {
     return true;
 }

 @Override
 public void setContentView(int layoutResID) {
     context = this;

     DrawerLayout fullView = (DrawerLayout) getLayoutInflater().inflate(R.layout.drawer_main, null);
     FrameLayout activityContainer = (FrameLayout) fullView.findViewById(R.id.frame);
     getLayoutInflater().inflate(layoutResID, activityContainer, true);

     super.setContentView(fullView);
     toolbar = (Toolbar) fullView.findViewById(R.id.tool_bar);

     setSupportActionBar(toolbar);
     getSupportActionBar().setTitle("");
     toolbar.setTitle("");
     this.getSupportActionBar().setElevation(0);

     getSupportActionBar().setLogo(R.drawable.ic_arrahm);
     //  toolbar.setLogo(R.drawable.ic_main);
     if (useToolbar()) {
         setSupportActionBar(toolbar);
         setTitle("Places Near Me");
     } else {
         toolbar.setVisibility(View.GONE);
     }

     //Initializing NavigationView
     navigationView = (NavigationView) findViewById(R.id.navigation_view);

     //Setting Navigation View Item Selected Listener to handle the item click of the navigation menu
     navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {

         // This method will trigger on item Click of navigation menu
         @Override
         public boolean onNavigationItemSelected(MenuItem menuItem) {
             //Checking if the item is in checked state or not, if not make it in checked state
             if (menuItem.isChecked()) menuItem.setChecked(false);
             else menuItem.setChecked(true);

             //Closing drawer on item click
             drawerLayout.closeDrawers();

             //Check to see which item was being clicked and perform appropriate action
             switch (menuItem.getItemId()) {
                 case R.id.edit_profile:                   
                     return true;
                 case R.id.change_password:
                     return true;
                 default:
                     Toast.makeText(getApplicationContext(), "Work in progress", Toast.LENGTH_SHORT).show();
                     return true;
             }
         }
     });

     // Initializing Drawer Layout and ActionBarToggle
     drawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout);
     View header = navigationView.getHeaderView(0);
     TextView tvName = (TextView) header.findViewById(R.id.name);
     TextView tvEmail = (TextView) header.findViewById(R.id.email);
     String name = Preferences.getDataFromStringPreferences(context,Constants.USER_DETAILS, Constants.USER_NAME);

     if (name != null) {
         tvName.setText(name);
     }

     ActionBarDrawerToggle actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.openDrawer, R.string.closeDrawer) {

         @Override
         public void onDrawerClosed(View drawerView) {
             // Code here will be triggered once the drawer closes as we dont want anything to happen so we leave this blank
             super.onDrawerClosed(drawerView);
         }

         @Override
         public void onDrawerOpened(View drawerView) {
             super.onDrawerOpened(drawerView);
         }
     };

     //Setting the actionbarToggle to drawer layout
     drawerLayout.setDrawerListener(actionBarDrawerToggle);

     //calling sync state is necessay or else your hamburger icon wont show up
     actionBarDrawerToggle.syncState();
 }

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
     return super.onCreateOptionsMenu(menu);
 }

 @Override
 public boolean onPrepareOptionsMenu(Menu menu) {
     return super.onPrepareOptionsMenu(menu);
 }

 @Override
 protected void onPostCreate(Bundle savedInstanceState) {
     super.onPostCreate(savedInstanceState);
 }

 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
     int id = item.getItemId();
     return mDrawerToggle.onOptionsItemSelected(item);
 }

}
创建drawer_main.xml布局文件

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/drawerLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <include
            android:id="@+id/tool_bar"
            layout="@layout/toolbar" />

        <FrameLayout
            android:id="@+id/frame"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

        </FrameLayout>

    </LinearLayout>

    <android.support.design.widget.NavigationView
        android:id="@+id/navigation_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        app:headerLayout="@layout/drawer_header"
        app:menu="@menu/drawer">

    </android.support.design.widget.NavigationView>
</android.support.v4.widget.DrawerLayout>

在布局下创建toolbar.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="@color/colorPrimary"
    android:elevation="4dp"
    android:theme="@style/ThemeOverlay.AppCompat.Dark"
    >
</android.support.v7.widget.Toolbar>

创建drawer_header.xml布局资源文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="178dp"
    android:background="@color/colorPrimary"
    android:orientation="vertical"
    android:padding="20dp"
    android:weightSum="1">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="56dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:orientation="vertical">

        <TextView
            android:id="@+id/name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="16dp"
            android:text=""
            android:textColor="#ffffff"
            android:textSize="14sp"
            android:textStyle="bold"

            />

        <TextView
            android:id="@+id/email"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="16dp"
            android:text=""

            android:textColor="#ffffff"
            android:textSize="14sp"
            android:textStyle="normal"

            />
    </LinearLayout>

    <ImageView
        android:id="@+id/circleView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"

        android:layout_centerInParent="true"
        android:layout_marginLeft="16dp"
        android:layout_marginTop="30dp" />
</RelativeLayout>

相关问题