آموزش ساخت Bottom Navigation در برنامه نویسی اندروید(اندروید استودیو) + سورس کامل برنامه

آموزش ساخت Bottom Navigation در برنامه نویسی اندروید(اندروید استودیو) + سورس کامل برنامه

در این آموزش با روش ایجاد Bottom Navigation ها در برنامه نویسی اندروید آشنا خواهیم شد و سپس با همدیگر یک Bottom Navigation با سه ایتم را برنامه نویسی و ایجاد خواهیم کرد. این آموزش برای افراد مبتدی نیز بسیار ساده و روان می باشد.

در این آموزش قصد داریم شما رو با Bottom Navigation در اندروید آشنا کنیم و به شما دوستان و همراهان گرامی روش ایجاد این بخش رو در برنامه نویسی اندروید آموزش بدیم. پس با ما همراه باشید.

Bottom Navigation چیست؟ 

bottom navigation ها منو های ناوربری هست که در پایین صفحه ایجاد می شوند و کاربر را قادر می سازند تا بین چندین صفحه به راحتی حرکت کنند.

تصویر زیر یک bottom navigation را نمایش می دهد:

 

خوب پس حتما تا کنون متوجه شدید که bottom navigation دقیقا چیست و چه کاری انجام می دهد! 

اما چطور ما با استفاده از برنامه نویسی اندروید یک bottom navigation برای نرم افزار یا اپلیکیشن خودمون ایجاد کنیم؟! نگران نباشید! :) من اینجا هستم که شما رو راهنمایی کنیم:) پس تا اخر این آموزش همراه من باشید:*

 

برای شروع یک پروژه جدید یا اکتیوتی خالی یا blank در اندروید ایجاد کنید.

من اسم پروژه خودم رو TestBottomNavi گذاشتم (شما می تونید ه اسمی برای خود استفاده کنید)

پس از ایجاد پروژه اولین مرحله فراخوانی کتاب خانه desgin هست. برای افزودن این کتابخانه مسیر زیر را دنبال کنید:


File>  Project Structure > Modules > app > Dependencies

 

در پنجره باز شده بر روی ایکن + یا همان plus خودمان کلیک کنید و گزینه Library Dependecies را انتخاب کنید تا صفحه ای همانند تصویر زیر برای شما نمایش داده شود:

در باکس جستجو عبارت design را جستجو کنید و کتابخانه ای  com.android.support:design را به پروژه خود اضاف نمایید. (ممکن هست با توجه به نسخه اندروید استودیو شما و بروز بودن یا نبودن اون شماره نسخه شما با چیزی که تو تصویر زیر مشخص هست متفاوت باشه که مشکلی نیست. شما تنها دقت کنید که کتابخانه ای که گفتم رو اد کنید.

آموزش ایجاد bottom navigation

پس از انتخاب کتابخانه design دکمه ok و بعد از اون باز هم دکمه ok رو کلیک کنید و متنظر بمونید تا بروژه sync  بشه.

پس از sync شدن اولین مرحله ایجاد یک menu می باشد.

برای این ایجاد یک menu item جدید مراحل زیر را دنبال کنید:

بر روی پوشه res راست کلیک کنید.گزینه New را انتخاب کنید

گزینه  Android Resource Directory را انتخاب کنید

سپس گزینه new resource directory  را کلیک کنید تا با پنجره ای مشابه تصویر زیر مواجه شوید.

در پنجره باز شده resource Type را به menu تغییر دهید و بدون تغییر در چیز دیگری دکمه ok را کلیک کنید.

پس از کلیک کردن دکمه ok یک فولدر با نام menu در دایرکتوری res شما ایجاد خواهد شد:

بر روی فولدر menu راست کلیک کنید بر روی گزینه New رفته و سپس گزینه Menu resourcefile را انتخاب نمایید.

با کلیک بر روی گزینه menu resource پنجره ای برای شما باز خواهد شد. در این پنجره File Name را به نام nav_items قرار دهید. (مطابق تصویر زیر) و سپس بر روی دکمه ok کلیک کنید.

حال یک فایل جدید بنام nav_items.xml در پوشه ی menu موجود در دایرکتوری res ایجاد شده است.

فایل ایکن ها را از اینجا دانلود کنید و به دایرکتوری drawable که در پوشه ی res می باشد انتقال دهید.

حالا فایل nav_items.xml را باز کنید و کدهای درون آن را پاک کرده و کدهای زیر را جایگزین کنید:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/item_card"
        android:icon="@drawable/ic_card"
        android:title="notifi" />
    <item
        android:id="@+id/item_notify"
        android:icon="@drawable/ic_notification"
        android:title="Item" />
    <item
        android:id="@+id/item_user"
        android:icon="@drawable/ic_user"
        android:title="Item" />
</menu>

 

خوب حالا ما ایتم های منوی navigate خود را ایجاد کرده ایم! با دقت در کدهای بالا متوجه خواهید شد که ما سه ایتم برای منوی خود معرفی کرده ایم که به هر ایتم ای دی، نام و ایکن مورد نظر را اختصاص داده ایم.

در این مرحله فایل activity_main.xml را که در دایرکتوری layout می باشد باز کنید و کدهای موجود در اون رو پاک کرده و کدهای زیر رو جایگزین کنید:

<?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"
    tools:context=".MainActivity">

    <android.support.design.widget.BottomNavigationView
        android:id="@+id/nav_main"
        android:layout_width="match_parent"
        android:layout_height="56dp"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        android:layout_alignParentEnd="true"
        android:layout_alignParentBottom="true"
        android:layout_marginStart="0dp"
        android:layout_marginEnd="0dp"
        android:layout_marginBottom="0dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:menu="@menu/nav_items">

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

    <FrameLayout
        android:id="@+id/frame_layout_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@+id/nav_main"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        android:layout_marginTop="8dp"
        app:layout_constraintTop_toTopOf="parent">

    </FrameLayout>


</android.support.constraint.ConstraintLayout>

اگر دقت کرده باشید ما با خاصیت app:menu منوی ایجاد شده در مرحله قبل را به bottom navigation خودمون متصل کردیم. البته این BottomNavigationView دستورات بسیار جالب دیگه ای هم داره که فعلا در این مطلب از بیان اونها صرف نظر میکنم.

پس از جایگذاری کدهای بالا اگر بر روی تب desgin مربوط به لایه activity_main.xml در اندروید استودیو کلیک کنید با تصویری مطابق تصویر زیر روبرو خواهید شد:

تا این مرحله ما منوی Bottom Navigation خود را به خوبی ایجاد کرده ایم.

اما می میخواهیم با کلیک بر روی هر ایکن یک اطلاعات خاص نمایش داده شود. این کار هم بسیار ساده است. 

ابتدا سه Fragment جدید ایجاد می کنیم

برای ایجاد مراحل زیر را دنبال نمایید:

پوشه java را باز کنید بر نام پروژه خود کلیک کنیدو مراحل زیر را دنبال نمایید

New>  Fragmant> Fragment(Blank)

پس از کلیک بر روی Fragment (Blank) با صفحه ای بصورت زیر روبرو خواهید شد:

نکته: در این صفحه تیک دو چک باکسی که در تصویر زیر مشخص شده است را بردارید.

Fragmant Name را به CardFragment تغییر دهید و دکمه Finish را کلیک کند.

دو fragment دیگر نیز به همین روش و با نام های NotificationFragment و UserFragment ایجاد نمایید.

توجه کنید که تیک ها را حتما بردارید!

خوب حالا یک مرحله دیگه مونده! و اون کار با فایل MainActivity و تعریف متغییر ها و توابع هست.

 

  کلاس MainActivity را مطابق زیر تغییر دهید:

 

public class MainActivity extends AppCompatActivity {

    BottomNavigationView bottomNavigationView;
    FrameLayout frameLayout;
    UserFragment userFragment;
    CardFragment cardFragment;
    NotificationFragment notificationFragment;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        frameLayout = (FrameLayout) findViewById(R.id.frame_layout_main);
        bottomNavigationView = (BottomNavigationView) findViewById(R.id.nav_main);
        userFragment = new UserFragment();
        notificationFragment = new NotificationFragment();
        cardFragment = new CardFragment();

        setFragment(cardFragment);
        bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
                switch (menuItem.getItemId()){
                    case R.id.item_card:
                        setFragment(cardFragment);
                        return  true;
                    case R.id.item_user:
                        setFragment(userFragment);
                        return true;
                    case R.id.item_notify:
                        setFragment(notificationFragment);
                        return true;
                }
                return false;
            }
        });

    }


    private void setFragment(Fragment fragment) {

        FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
        fragmentTransaction.replace(R.id.frame_layout_main,fragment);
        fragmentTransaction.commit();

    }

}

 

خوب حالا توضیحی در مورد کدهای بالا:

ما ابتدا BottomNavigationView و Fragment و FrameLayout خود را نامگذاری اولیه کردیم.

سپس در تابع onCreate آنها را تعریف و معرفی کردیم.

bottomNavigationView اشاره داره به BottomNavigationView که در فایل activity_main.xml ما قرار دارد.
frameLayout نیز اشاره به FrameLayout دارد که در فایل activity_main.xml ما می باشد که از آن برای نمایش Fragment ها استفاده می کنیم.

 

سپس با استفاده از متد setOnNavigationItemSelectedListener که یکی از متدهای Bottom Navigation می باشد و با استفاده از دستور switch مشخص کرده ایم که با کلیک بر روی هر آیتم از منوی ما چه اتقاقی بیفتد و کدام Fragment  نمایش داده شود.

تابع setFragment هم همونطور که متوجه شده اید کار ست کردن و نمایش فراگمنت مورد نظر ما رو انجام میده.

 

حال می توانید پروژه نهایی را در شبیه ساز یا موبایل خود اجرا و نتیجه را مشاهده نمایید.

 

توجه: از قسمت Layout ها متن درون لایه های هر fragment را تغییر دهید تا پس از ران کردن برنامه با کلیک بر روی هر ایکن متوجه تغییرات شوید.

درصورتی که سوالی یا مشکلی در مورد ایجاد bottom Navigation دارید از بخش نظرات اعلام بفرمایید.

 

فایل نهایی برنامه را می توانید از اینجا دانلود کنید


دسته بندی ها:

اندروید

ارسال نظر

برای اطلاع از پاسخ به نظر شما می توانید ایمیل یا شماره موبایل خود را وارد نمایید. *

ایمیل و شماره موبایل شما کاملا مخفی خواهد ماند و در سایت نمایش داده نخواهد شد. *

اگر نظری برای این مطلب ارسال شد از طریق ایمیل مرا اطلاع بده!
لسیت نظرات
محمدمهدی باصری
سلام وقت بخیر. چجوری یک intent در یک button در یکی از فرگمنت ها بنویسم که به یک اکتیویتی دیگر منتقلم کنه؟ مانند اینتنی که از یک اکتیویتی به اکتیویتی دیگر میرود اما ایندفعه در هرکدام از این سه فرگمنت به اکتیوی تی دیگر بروم؟

پاسخ به این نظر

مصطفی
ممنون از آموزش عالیتون. چطور میشه آیکون های رنگی ( دو یا سه رنگ ) داشت. یعنی وقتی انتخاب میشه آیکون تک رنگ نباشه. ظاهرا با استفاده از رنگ های اصلی اپلیکیشن تینت میکنه آیکون ها رو. اگه بخوایم رنگای آیکون تغییر نکنه چکار باید کرد؟

پاسخ به این نظر

alireza
سلام من با نویگیشن میخوام کارکنم و یه نویگیشن به صورت متریال هم درست کردم یه سوال داشتم اونم این بود این فرگمنت هایی که extendsکردیم از Fragmentرو چطوری میتونیم از فانکشن هایی که تو appcomaptهست استفاده کنیم؟(مثل findviewbyid ,getintent,...)سوال شاید ساده باشه و خنده دار ولی سوالیه که باید میپرسیدم

پاسخ به این نظر

پاسخ
ایمان برومند زاده
سلام دوست عزیز برا دسترسی به المنت های مورد نظرتون باید از LayoutInflater که توی فرگمنت استفاده کردید استفاده کنید. برا نمونه: root.findViewById(R.id.recyclerView); برای دستوری gentintent هم کافیه تابع getActivity() را قبل از اون قرار بدین. بدین صورت: getActivity().getIntent() سوال دیگه ای داشتید در خدمتم. :)

پاسخ به این نظر

کاربر
سلام . من هیچ مشکلی ندارم . اما یه سوال دارم . من وقتی بیشتر از 3 تا یعنی 4 تا ایتم به باتم نویگیشن ویو اضافه میکنم وقتی رو یکی از آیتم ها کلیک میشه سایزش نسبت به سایر آیتم ها افزایش پیدا میکننه . چطور این خاصیت که فک کنم انمیشن خودش هست رو حذف کنم و مثل اینستاگرام بشه ؟ یعنی با کلیک کردن روی آیتم فقط فرگمنت رو لود کنه و هیچ تغییری روی آیتم انتخواب شده ایجاد نشه . و مورد آخر هم اینه که چرا اسم و آیکون آیتم همزمان نشون داده نمیشه ؟ یعنی وقتی روی ایتم کلیک شد اسمش نشون داده میشه . ( در موارد 4 آیتمه ) . ممنون میشم پاسخ رو بهم ایمیل کنید .

پاسخ به این نظر

پاسخ
ایمان برومند زاده
سلام دوست عزیز برای مورد اول میتونید از آموزشی که تو این صفحه گفته شده استفاده کنید: https://stackoverflow.com/questions/40972293/remove-animation-shifting-mode-from-bottomnavigationview-android?answertab=votes یا این صفحه: https://stackoverflow.com/questions/41649494/how-to-remove-icon-animation-for-bottom-navigation-view-in-android/47544809 برای مورد دوم هم تگ زیر رو در xml لایه خود قرار بدین: app:labelVisibilityMode="labeled" اگر باز هم سوال یا مشکلی بود بفرمایید

پاسخ به این نظر

حمید
سلام وقت به خیر. اول ممنونم از اموزش خوبتون. من به همین روش تعدادی فراگمنت ساختم و بهشون باموفقیت وصل شدم و... میخوام فراگمنت وسطیم رو به صورت پیش فرض نشون بده که همین اتفاق می افته با کد نویسی. ولی مشکلی که هست اینه که وقتی برنامه رو ران میکنم فراگمنت پیش فرض رو نشون میده ولی ایکون اولی از سمت چپ رنگ سلکت شده رو داره. البته بعد از اون دیگه روی هر ایتم فراگمنت کلیک کنم رنگش با فریمش همسانه. شما میدونید چطور میشه این مشکل رو حل کرد؟ ممنون

پاسخ به این نظر

پاسخ
برومندزاده
سلام دوست عزیز با استفاده از کد زیر می تونید اینکار رو انجام بدین bottomNavigationView.setSelectedItemId(R.id.YOUR_ITEM_ID); برای نمونه در کد بالا با setFragment رو بصورت زیر تغییر بدین: setFragment(notificationFragment); بعد زیر همین کد هم کدی گفتم رو بصورت زیر قرار بدین: bottomNavigationView.setSelectedItemId(R.id.item_notify); به این صورت می تونید مشکلتون رو حل و هر تبی رو که خواستید انتخاب کنید. از اینکه ما رو برای رفع مشکل خودتون انتخاب کردین خوشحالیم.

پاسخ به این نظر

moslem
دو دستور برای هنثی کردن botton و حذف botton بعد از اجرا برنامه

پاسخ به این نظر

پاسخ
برومندزاده
سلام متوجه نشدم، لطفا سوال خودتون رو واضح تر بیان کنید

پاسخ به این نظر