Side Bar - Navigation Drawer

Used to penalize the top level menu of application.




build.gradle (module:app)
apply plugin: 'com.android.application'

android {
  compileSdkVersion 28
  defaultConfig {
      applicationId "com.thecodeexpo.sidebar"
      minSdkVersion 15
      targetSdkVersion 28
      versionCode 1
      versionName "1.0"
      testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
  }
  buildTypes {
      release {
          minifyEnabled false
          proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
      }
  }
}

dependencies {
  implementation fileTree(dir: 'libs', include: ['*.jar'])
  implementation 'com.android.support:appcompat-v7:28.0.0'
  implementation 'com.android.support:design:28.0.0'
  implementation 'com.android.support.constraint:constraint-layout:1.1.3'
  implementation 'com.android.support:support-vector-drawable:28.0.0'
  implementation 'com.android.support:design:28.0.0'
}
Menu (activity_main_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_image"
          android:icon="@drawable/ic_menu_gallery"
          android:title="Image Gallery" />
      <item
          android:id="@+id/nav_video"
          android:icon="@drawable/ic_menu_slideshow"
          android:title="Video Gallery" />

  </group>

  <item android:title="About Us">
      <menu>
          <item
              android:id="@+id/nav_share"
              android:icon="@drawable/ic_menu_share"
              android:title="Share" />
      </menu>
  </item>

</menu>
Layout (nav_header_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:background="@drawable/side_nav_bar"
  android:gravity="bottom"
  android:orientation="vertical"
  android:paddingLeft="@dimen/activity_horizontal_margin"
  android:paddingTop="@dimen/activity_vertical_margin"
  android:paddingRight="@dimen/activity_horizontal_margin"
  android:paddingBottom="@dimen/activity_vertical_margin"
  android:theme="@style/ThemeOverlay.AppCompat.Dark">

  <ImageView
      android:id="@+id/imageView"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:contentDescription="@string/nav_header_desc"
      android:paddingTop="@dimen/nav_header_vertical_spacing"
      app:srcCompat="@mipmap/ic_launcher_round" />

  <TextView
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:paddingTop="@dimen/nav_header_vertical_spacing"
      android:text="The Code Expo"
      android:textColor="#FFFFFF"
      android:textAppearance="@style/TextAppearance.AppCompat.Body1" />

  <TextView
      android:id="@+id/textView"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="http://thecodeexpo.blogspot.com"
      android:textColor="#FFFFFF" />

</LinearLayout>
Layout (app_bar_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout 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">

  <android.support.design.widget.AppBarLayout
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:theme="@style/AppTheme.AppBarOverlay">

      <android.support.v7.widget.Toolbar
          android:id="@+id/toolbar"
          android:layout_width="match_parent"
          android:layout_height="?attr/actionBarSize"
          android:background="?attr/colorPrimary"
          app:popupTheme="@style/AppTheme.PopupOverlay" />

  </android.support.design.widget.AppBarLayout>

  <include layout="@layout/content_main" />


</android.support.design.widget.CoordinatorLayout>
Layout (content_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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"
  app:layout_behavior="@string/appbar_scrolling_view_behavior"
  tools:context=".MainActivity"
  tools:showIn="@layout/app_bar_main">

  <FrameLayout
      android:id="@+id/container"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Hello World!"
      app:layout_constraintBottom_toBottomOf="parent"
      app:layout_constraintLeft_toLeftOf="parent"
      app:layout_constraintRight_toRightOf="parent"
      app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>
Activity Layout (activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.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">

  <include
      layout="@layout/app_bar_main"
      android:layout_width="match_parent"
      android:layout_height="match_parent" />

  <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>
Activity Class (MainActivity.java)
public class MainActivity extends AppCompatActivity
      implements NavigationView.OnNavigationItemSelectedListener {
  FragmentTransaction fragmentTransaction;
  Fragment fragment;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
      setSupportActionBar(toolbar);

      DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
      ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
              this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
      drawer.addDrawerListener(toggle);
      toggle.syncState();

      NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
      navigationView.setNavigationItemSelectedListener(this);
  }

  @Override
  public void onBackPressed() {
      DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
      if (drawer.isDrawerOpen(GravityCompat.START)) {
          drawer.closeDrawer(GravityCompat.START);
      } else {
          super.onBackPressed();
      }
  }
  @Override
  public boolean onNavigationItemSelected(MenuItem item) {
      int id = item.getItemId();

      if (id == R.id.nav_image) {
          fragmentTransaction = getFragmentManager().beginTransaction();
          fragment = new GalleryImage();
          fragmentTransaction.replace(R.id.container, fragment);
          fragmentTransaction.commit();
      } else if (id == R.id.nav_video) {
          fragmentTransaction = getFragmentManager().beginTransaction();
          fragment = new GalleryVideo();
          fragmentTransaction.replace(R.id.container, fragment);
          fragmentTransaction.commit();
      } else if (id == R.id.nav_share) {
          //Share Code
      }

      DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
      drawer.closeDrawer(GravityCompat.START);
      return true;
  }
}
Fragment Layout (image_fragment.xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical"
  android:padding="10dp">

  <LinearLayout
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:layout_margin="5dp"
      android:orientation="horizontal">

  <ListView
      android:id="@+id/list"
      android:scrollbars="none"
      android:layout_margin="5dp"
      android:layout_width="match_parent"
      android:layout_height="wrap_content">
  </ListView>


</LinearLayout>
Fragment Class (GalleryImage.java)
public class SearchFragment extends Fragment {
  View view;
  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
      view = inflater.inflate(R.layout.image_fragment, container, false);
      ((AppCompatActivity) getActivity()).getSupportActionBar().setTitle("Search");



      return view;
  }
}
Fragment Layout (video_fragment.xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical"
  android:padding="10dp">

  <LinearLayout
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:layout_margin="5dp"
      android:orientation="horizontal">

  <ListView
      android:id="@+id/list"
      android:scrollbars="none"
      android:layout_margin="5dp"
      android:layout_width="match_parent"
      android:layout_height="wrap_content">
  </ListView>


</LinearLayout>
Fragment Class (GalleryVideo.java)
public class SearchFragment extends Fragment {
  View view;
  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
      view = inflater.inflate(R.layout.video_fragment, container, false);
      ((AppCompatActivity) getActivity()).getSupportActionBar().setTitle("Search");



      return view;
  }
}

Comments