آموزش ساخت Navigation Drawer متریال دیزاین در برنامه نویسی اندروید
سلام دوستان در این سری از آموزش برنامه نویسی اندروید به آموزش ساخت Navigation Drawer متریال دیزاین در برنامه نویسی اندروید می پردازیم در ادامه با ما همراه باشید.
در این جا ما 3 تا فرگمنت داریم که کاربر با کلیک کردن منو وانتخاب یکی از sub منو ها وارد آن فرگمنت ها میشه بدون افکت باز شدن اکتیویتی یعنی عملی شبیه به tab اتفاق می افتد. و ما برای بهتر شدن پروژه (متریال شدنش) از recyclerView نیز استفاده کردیم.
پس مثل همیشه وارد build.gradle شده (module) و در بخش dependencies کتاب خانه های زیر را اضافه کنید.
سپس پروژه را sync کنید علت خطاهای گریدل را قبلا بررسی کرده ایم.
در ایتدا باید فایل های مربوط به layout و Navigation Drawer و فرگمنت ها را ایجاد می کنیم.
پس فایل activity_main.xml ما همانند زیر می شود.
همانطور که میبیند یک LinearLayout است در ابتدا که همان صفحه اصلی ما میشود سپس داخل آن یک LinearLayout دیگر قرار دادیم تا Toolbar را در آن جا بندازیم و FrameLayout هم صفحه اصلی میشه در زیر toolbar هر چیزی در آن قرار دهید با اجرای برنامه به شما نمایش داده می شود و در آخر هم یک fragment ایجاد کردیم و این فرگمنت ما سفارشی است پس باید یک فایل به نام fragment_navigation_drawer.xml درست کرده و کد های زیر را در آن قرار دهید.
کد بالا همون بخش menu رو درست می کنه یعنی وقتی روی menu کلیک کنید Navigation در آور باز می شود و محتوایت آن می باشد که شامل یک عکس و یک RecyclerView است خود این Recyclerview سه بخش ایجاد می کند که با کلیک بروی آنها وارد فرگمنت های دیگه می شویم.
حالا باید ستون مربوط به Navigation Drawer رو درست کنیم پس یک فایل به نام nav_drawer_row.xml درست کنید کد زیر را در آن قرار دهید.
دوستان یادم رفت در ابتدا ما از Toolbar استفاده کردیم برای اینکه toolbar برای شما خطا ندهد در همان پوشه layout یک فایل به نام toolbar.xml درست کنید کد زیر رو در آن قرار دهید.
تا اینجا بخشی از کار تموم شده حالا ما باید سه تا فرگمنت درست کنیم این فرگمنت های میشه Layout هر کدام از منو ها یعنی وقتی وارد منو شدید سه تا آیتم میبینید با کلیک روی هر کدام یکی از این فرگمنت ها باز می شود.
پس فرگمنت هایی به نام fragment_friends.xml , fragment_home.xml و fragment_messages.xml ایجاد کنید.
پس فایل fragment_home.xml همانند زیر می شود.
و فایل fragment_friends.xml همانند زیر
و در آخر fragment_messages.xml هم همانند زیر می شود.
برویم به بخش کد برنامه برای handle کردن Navigation Drawer و بقیه کار ها ابتدا یک فایل به نام MainActivity.java ایجاد کنید کد زیر را در آن قرار دهید.
در ابتدا view مربوط به toolbar را به دست آوردیم و از setSupportActionBar برای قرار دادن (فعال کردن) toolbar استفاده کردیم ولی به زبان ساده تولباری را که ساپورت می شود فعال می کند سپس view مربوط به Navigation drawer را که ساختیم به دست آوردیم از setUp برای فعال کردن باز شدن meni در زمانی که بروی toolbar کلیک شد استفاده کردیم و کد زیر
باعث باز شدن تولبار در هنگام باز شدن اپ می شود.
از void که در بالا displayView نام دارد برای رفتن به فرگمنت های مختلف استفاده کردیم و برای بهتر شدن کار ما تایتل رو هم عوض می کنیم یعنی هر اکتیویتی که بریم Title مربوط به toolbar تغییر خواهد کرد.
از FragmentManager برای replace کردن یک fragment جدید در هر بار استفاده کردیم. چون وقتی وارد اولین فرگمنت شوید اگر بخواهید وارد دومی شوید باید قبلی حذف شده و جدید جای آن را گیرد.
کد جاوای مربوط به فرگمنت Navigation Drawer هم همانند زیر می شود. پس یک فایل به نام FragmentDrawer.java ایجاد کرده و کد های زیر را در آن قرار دهید.
getData ایتم های Navigation Drawer را آماده می می کند.
setUp هم برای انجام عملیات ایجاد fragment و در بالا ما یک RecyclerView اگر یادتان باشید تعریف کردیم چون Recyclerview یک object خاص است باید از Touchevent استفاده کنیم تا زمانی که کاربر بروی ایتم های درون Recyclerview کلیک کرد ما بتوانیم position هر کدام از آنها را به دست آورده و fragment مربوط به آن را باز کنیم .
قبلا از اینکه ما کلاس بالا را ایجاد کنیم باید یک آداپتور و یک model ایجاد کنیم (علت ایجاد آنها را حدودا پنج بار گفته ایم می توانید در پست های قبلی آن را مطالعه کنید)
و کد مربوط به به Model همانند زیر می شود پس یک فایل به نام NavDrawerItem.java ایجاد کنید کد زیر را در آن قرار دهید.
کد بالا به getter و setter معروف است.
بیشتر کار تمام شده است حالا فقط باید Fragment ها رو ایجاد کنیم.
یک فرگمنت به نام FriendsFragment.java ایجاد کنید کد زیر را در آن قرار دهید.
کار خاصی در فرگمنت انجام نداده ایم در صورتی که کد بالا را متوجه نشدید آموزش فرگمنت در سایت هست.
فایل فرگمنت بعدی ما HomeFragment.java است پس کد زیر را در آن قرار دهید.
و آخرین فرگمن ما که نامش برابر با MessagesFragment.java را ایجاد کرده و کدهای زیر را در آن قرار دهید.
کد های مربوط به فایل dimes.xml که در فولدر res/values قرار دارد در صوتی که وجود نداشت فایلی با همین نام ایجاد کنید.
کد های مربوط به string.xml هم همانند زیر می باشد.
این آموزش هم به پایان رسید.
موفق باشید.
با سلام و تشکر
اگر قبل از آموزش یه تصویر یا یک گیف از نتیجه کار وجود داشته باشه درکش خیلی راحت تره
بیشتر آموزش ها پیش نمایش دارند ولی سعی می کنیم برای همه پست ها ایجاد کنیم.
سلام و عرض خسته نباشید …
لطف کنید نتیجه کار رو بزارید که بیننده ها ببینن کاری ک شما کردین چه نتیجه ای داشته که ایا به دردشون میخوره که آموزش رو دنبال کنند یا برن سراغ آموزش دیگه ای …
مچکرم
سلام و درود بیشتر آموزش های پیش نمایش به صورت gif دارند یا برای آنها فیلم قرار داده ایم در صورت امکان برای بقیه نیز پیش نمایش قرار خواهیم داد.
سلام
یه اررور برنامه تو خط زیر داره
(“mDrawerToggle = new ActionBarDrawerToggle(getActivity(), drawerLayout, toolbar,”Opend”,”Closed
به opend و closed گیر میده
دلیلش چیه؟
سلام حتما تعریفش نکردید حذف خط بالا در برنامه مشکلی ایجاد نمی کند.
چطور تعریفش کنم ؟
یه خط نیست یه سری تابع هم داخلش تعریف کردید
خط 97 تا 123 کلاس FragmentDrawer شامل میشه
بروی همان خط که هستید(باید در موقعیتی قرار بگیرید که یک علامت قرمز رنگ در سمت چپ برای شما ظاهر شود) کلید Alt+Enter را زده و اولین گزینه را انتخاب کنید خطا برطرف می شود.
و دقت کنید در برنامه یک عکس استفاده شده است که در اینجا قرار نگرفته است ممکن است خطای شما به خاطر آن عکس باشد فایل fragment_navigation_drawer.xml را بررسی کنید.
زدم خطا بر طرف نشد
اون عکسو برداشتم کلا مشکل از اون نیست
import ها را به درستی انجام دادید ؟ نباید دیگر ir.programchi باشد بلکه باید نام پکیج خودتان باشد.
بله درستش کردم اونارو
میشه فایل پروژه رو قرار بدید که دانلودش کنم ؟
امکان قرار دادن سورس فعلا وجود ندارد.
به ایمیلم هم نمیشه بفرستید؟
aliavatefi8@gamil.com
خیر شرمنده سورس برنامه ها در حال قرارگیری در بخش فروشگاه سایت است امکان ارسال وجود ندارد موفق باشید.
سلام ، بجای “Opend” , “Closed” اینا رو وارد کن :
R.string.drawer_open ,R.string.drawer_close
سلام
import info.androidhive.materialdesign.R;
import ir.programchi.R;
import ir.programchi.NavDrawerItem;
این متد ها کار نمیکنه ! چرا؟من اسم پکیج رو به اسم پکیج پروژه م تغییر دادم و اون عکس ها رو گذاشتم ..اما بازم خطا داره!!!!
سلام و عرض خسته نباشید این متد addOnItemTouchListener کارش چیه؟ و متد onclick و onlongclickزو میشه توضیح بدین؟
سلام پروژه چند تا از خطاهای بالا رو داشت همانطور که گفتید کد ها رو تغییر دادم ارور ها برطرف شد ولی پروژه stopp می شه یعنی اصلا اجرا نمی شه ،مشکل چی هست؟
میتونید از logcat ببیند دلیل stop شدن برنامه چیه..
سلام و تشکر از آموزش های خوب و کامل شما
من وقتی می خوام کتابخانه ‘com.android.support:recyclerview-v7:22.1.0’ رو کامپایل کنم ارور زیر رو می ده لطفا راهنماییم کنین با تشکر
This support library should not use a different version (22) than the compileSdkVersion (24) less… (Ctrl+F1)
There are some combinations of libraries, or tools and libraries, that are incompatible, or can lead to bugs. One such incompatibility is compiling with a version of the Android support libraries that is not the latest version (or in particular, a version lower than your targetSdkVersion.)
ورژنی که استفاده میکنید پایین تر از حد استاندارد این کتابخونس.تو بخش خطا گزینه install هست که در صورتی که ندارید براتون دانلود میکنه.
سلام من تو دوتا متد ActionBar.setTitle(java.lang.CharSequence) و setDisplayShowHomeEnabled(true) ارور های زیر رو داخل لوگ کت دریافت می کنم
java.lang.RuntimeException: Unable to start activity ComponentInfo{ir.akoit.modio/ir.akoit.modio.TopLevelActivity2}: java.lang.NullPointerException: Attempt to invoke virtual method ‘void android.support.v7.app.ActionBar.setTitle(java.lang.CharSequence)’ on a null object reference
و
java.lang.RuntimeException: Unable to start activity ComponentInfo{ir.akoit.modio/ir.akoit.modio.TopLevelActivity2}: java.lang.NullPointerException: Attempt to invoke virtual method ‘void
android.support.v7.app.ActionBar.setDisplayShowHomeEnabled(boolean)’ on a null object reference
لطفا راهنمایی کنید
سپاس
این ارور رو هم دریافت می کنم
java.lang.RuntimeException: Unable to start activity ComponentInfo{ir.akoit.modio/ir.akoit.modio.TopLevelActivity2}: java.lang.NullPointerException: Attempt to invoke virtual method ‘void android.support.v7.widget.Toolbar.setTitle(java.lang.CharSequence)’ on a null object reference
اشتباه cast کردین به احتمال زیاد.
سلام
من یک اکتیویتی جدید ساختم از نوع نویگیشن دراور . میخوام این نویگیشن خود اندروید روی صفحه من باشه که دوتا تب داره و هر تب ریسایکلر داره. وقتی فرگمنت های تب هامو اینکلود میکنم به نویگیشن دراورم . نویگیشن نمایش داده میشه اما ریسایکلرم اسکرول نمیخوره و کامل نمایش داده نمیشه
اگه کدتون رو در قالب فایل قرار بدین بهتر میتونیم کمک کنیم..همچنین بخش لایوت رو..
سلام
برنامه ی من موقع اجرا کرش میکنه خود کد هیچ ارروری نداره و اصلا هیچ خطی قرمز نیست ولی بعد از کرش تپ قسمت لاگ میگه
at com.example23.sobhan.myapplication.MainActivity.onCreate(MainActivity.java:27)
مشکل چیه؟؟؟؟
سلام
خط 27 مربوط به MainActivity رو قرار بدید ببینم علت چیست
سلام ممنون از آموزشی که گذاشتید ببخشید یه سوال داشتم برای راست چین کردن navigation باید چه کرد؟نمیخوام کل صفحه راست چین بشه فقط navigation drawer راست چین بشه ممنون میشم اگر جواب بدید
سلام و درود از آموزش هایی که قرار دادیم استفاده کنید
موفق باشید.
سلام و درود از لینک زیر استفاده کنید.
http://programchi.ir/?s=rtl+navigation
موفق باشید.
سلام ممنون از اموزش خوبتون یه سواال مهم داشتم برای پروژه ام… Navigation Drawer که ساختم بعد ایکون دانلود کردم و گذاشتم .. ولی ایکون ها رو به همین شکل سیاه و سفید نشون میده علتش چی هست؟؟ اصن این امکان هست که ایکون رنگی بشه گذاشت؟؟؟
سلام خیر آیکون رنگی در این نسخه کار نمی کنه چون به صورت پیشفرض آیکون ها بی رنگ می شوند یا اینکه شما می توانید به آنها رنگ دهید که زیاد فرقی نمی کند همش به یک رنگ تبدیل می شوند در صورتی که بخواهید آیکون رنگی قرار دهید از آموزشی که در لینک زیر قرار دارد استفاده کنید.
https://programchi.ir/2018/03/28/%d8%a2%d9%85%d9%88%d8%b2%d8%b4-navigation-drawer-%d9%81%d8%a7%d8%b1%d8%b3%db%8c-%d8%b1%d8%a7%d8%b3%d8%aa-%da%86%db%8c%d9%86-%d8%af%d8%b1-%d8%a7%d9%86%d8%af%d8%b1%d9%88%db%8c%d8%af/
اموزش های مرتبط با Navigation Drawer
http://programchi.ir/?s=navigation
موفق باشید.