آموزش جاوا و اندروید

یادداشت های یک برنامه نویس معمولی

آموزش جاوا و اندروید

یادداشت های یک برنامه نویس معمولی

طبقه بندی موضوعی

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();
    }
}
موافقین ۰ مخالفین ۰ ۹۹/۰۷/۲۹
میم دال

نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی