[ANDROID] Membuat Navigation Drawer
Kita tentukan nama aplikasi, domain dan project locationnya. Lalu klik Next
Pilih minimum SDK nya lalu klik Next
Pada bagian ini kita pilih Navigation Drawer Activity dan klik Next dan Klik Next lagi pada bagian berikutnya. Maka akan tampil struktur project nya.
Dari struktur diatas yang akan kita ubah adalah pada bagian content_main.xml, nav_header_main.xml, activity_main_drawer.xml, dan MainActivity.java.
Pertama kita ubah content_main.xml ubah root layoutnya menjadi FrameLayout, karena saya pada saat buat project adalah ConstraintLayout maka akan saya ubah dulu menjadi FrameLayout lalu berikan attribut id sehingga menjadi seperti ini :
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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/root_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.panduseptian.navigationdrawertutorial.MainActivity"
tools:showIn="@layout/app_bar_main">
</FrameLayout>
Setelah selesai maka kita akan pindah ke nav_header_main.xml. Disini kita bisa sesuaikan menu yang akan tampil pada aplikasi yang akan kita buat. Disini saya akan menghapus 2 item pada group item menjadi seperti ini :
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single">
<item
android:id="@+id/nav_camera"
android:icon="@drawable/ic_menu_camera"
android:title="Import" />
<item
android:id="@+id/nav_gallery"
android:icon="@drawable/ic_menu_gallery"
android:title="Gallery" />
</group>
<item android:title="Communicate">
<menu>
<item
android:id="@+id/nav_share"
android:icon="@drawable/ic_menu_share"
android:title="Share" />
<item
android:id="@+id/nav_send"
android:icon="@drawable/ic_menu_send"
android:title="Send" />
</menu>
</item>
</menu>
Dan menu sudah selesai kita buat, selanjutnya adalah merubah header dari Navigation Drawer di nav_header_main.xml. Disini saya akan menambahkan library CircleImageView di build.gradle
dependencies {
...
compile 'de.hdodenhof:circleimageview:2.1.0'
}
* Untuk link dari Librarynya disini => https://github.com/hdodenhof/CircleImageView
Lalu kita copy image ke folder drawable dan ubah menjadi seperti ini:
<?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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:theme="@style/ThemeOverlay.AppCompat.Dark">
<de.hdodenhof.circleimageview.CircleImageView
android:id="@+id/imageView"
android:layout_width="72dp"
android:layout_height="72dp"
android:paddingTop="@dimen/nav_header_vertical_spacing"
android:src="@drawable/profile"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="@dimen/nav_header_vertical_spacing"
android:text="Pandu Septian"
android:textAppearance="@style/TextAppearance.AppCompat.Body1" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="pandusg404@gmail.com" />
</LinearLayout>
Oke untuk viewnya sudah selesai, sebelum kita masuk ke MainActivity.java kita buat 2 Fragment yaitu Fragment1 dan Fragment2
Untuk layoutnya kita buat simple saja contohnya :
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.panduseptian.navigationdrawertutorial.Fragment2">
<!-- TODO: Update blank fragment layout -->
<!-- TODO: Update blank fragment layout -->
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="Fragment 2" />
</FrameLayout>
Oke sekarang kita buka MainActivity.java
Kita tambahkan script berikut pada onCreate :
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.root_layout, new Fragment1());
fragmentTransaction.commit();
Lalu pada onNavigationItemSelected kita tambahkan script berikut :
int id = item.getItemId();
switch (id){
case R.id.nav_camera:
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.root_layout, new Fragment1());
fragmentTransaction.commit();
break;
case R.id.nav_gallery:
FragmentTransaction fragmentTransaction1 = getSupportFragmentManager().beginTransaction();
fragmentTransaction1.replace(R.id.root_layout, new Fragment2());
fragmentTransaction1.commit();
break;
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
Sehingga menjadi seperti ini :
package com.panduseptian.navigationdrawertutorial;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v4.app.FragmentTransaction;
import android.view.View;
import android.support.design.widget.NavigationView;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.root_layout, new Fragment1());
fragmentTransaction.commit();
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.setDrawerListener(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 onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
switch (id){
case R.id.nav_camera:
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.root_layout, new Fragment1());
fragmentTransaction.commit();
break;
case R.id.nav_gallery:
FragmentTransaction fragmentTransaction1 = getSupportFragmentManager().beginTransaction();
fragmentTransaction1.replace(R.id.root_layout, new Fragment2());
fragmentTransaction1.commit();
break;
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
}
Oke sekarang kita build dan run ke HP android kita dan hasilnya seperti ini :
Cukup sekian tutorial singkatnya, semoga bermanfaat buat teman-teman developer semua.