Navigation Drawer
سه شنبه, ۲۹ مهر ۱۳۹۹، ۰۴:۴۷ ق.ظ
برای پیاده سازی این ویو حتما باید از drawerlayout استفاده بشه.
کد 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:context=".Activities.HomeActivity">
<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_drawer_header"
app:itemIconTint="#000000"
app:menu="@menu/nav_drawer" />
</androidx.drawerlayout.widget.DrawerLayout>
در قسمت جاوا باید موارد زیر نوشته شود: (اینا یه کم حفظین :|)
setSupportActionBar(toolbar);
//کد زیر برای معرفی تولبار و نویگیشن دراور به همدیگه هست
//دو تا پارامتر انتهایی حتما باید به صورت ریسورس استرینگ نوشته بشه
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer_layout, R.string.open, R.string.close);
drawer_layout.addDrawerListener(toggle);
toggle.syncState();
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
برای اینکه روی آیکون ساندویچی کلیک میکنیم باز شه، حتما باید کد زیر نوشته بشه:
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
if (toggle.onOptionsItemSelected(item)) {
return true;
}
return super.onOptionsItemSelected(item);
}
برای آیتم های نویگیشن دراور یه منو توی دایرکتوری مخصوص به خودش تعریف میکنیم:
<?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/home"
android:title="Home" />
<item
android:id="@+id/nav_profile"
android:icon="@drawable/profile"
android:title="Profile" />
<item
android:id="@+id/nav_settings"
android:icon="@drawable/settings"
android:title="Settings" />
<item
android:id="@+id/nav_signOut"
android:icon="@drawable/signout"
android:title="Sign Out" />
</group>
</menu>
<!-- <item android:title="second section">-->
<!-- <menu>-->
<!-- <group android:checkableBehavior="single">-->
<!-- <item-->
<!-- android:id="@+id/item_one1"-->
<!-- android:title="item 1" />-->
<!-- <item-->
<!-- android:id="@+id/item_two2"-->
<!-- android:title="item 2" />-->
<!-- <item-->
<!-- android:id="@+id/item_three3"-->
<!-- android:title="item 3" />-->
<!-- <item-->
<!-- android:id="@+id/item_four4"-->
<!-- android:title="item 4" />-->
<!-- </group>-->
<!-- </menu>-->
<!-- </item>-->
نکات:
اگر بخوایم آیتم ها عنوان نداشته باشن از item اولی (هایلایت این رنگی) استفاده نمیکنیم.
<item android:title="second section">
یعنی تیتر second section هست.
ترتیب استفاده از تگ ها به این صورت است:
1. item
2. menu
3. group
4. item
هندل کردن کلیک روی آیتم های نویگیشن ویو: (اینجا با کلیک روی هر کدوم فرگمنت به خصوص لود میشه)
nav_view.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.nav_home:
getSupportActionBar().setTitle("Home");
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new HomeFragment()).commit();
break;
case R.id.nav_profile:
getSupportActionBar().setTitle("Profile");
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new ProfileFragment()).commit();
break;
case R.id.nav_settings:
getSupportActionBar().setTitle("Setting");
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new SettingsFragment()).commit();
break;
case R.id.nav_signOut:
mAuth.signOut();
startActivity(new Intent(HomeActivity.this, LoginActivity.class));
finish();
break;
}
drawer_layout.closeDrawer(Gravity.START);
return true;
}
});
هندل کردن دکمه بک: (برای اینکه اگر نویگیشن ویو باز بود با زدن بک بسته بشه نه اینکه از برنامه بیاد بیرون)
@Override
public void onBackPressed() {
if (drawer_layout.isDrawerOpen(Gravity.START)) {
drawer_layout.closeDrawer(Gravity.START);
} else {
super.onBackPressed();
}
}
۹۹/۰۷/۲۹