آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
مشکل عدم دسترسی خریداران پیشین به برخی آموزش ها برطرف شد
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

استفاده از اسلایدینگ منو + Navigation Drawer دست ساز و خانگی (آموزش)

کاشی زاده  10 سال پیش  6 سال پیش
+123 0

آموزش ویدئویی مخصوص ساخت ActionBar بهمراه Navigation Drawer را از لینک زیر دریافت کنید .

لینک آموزش

 


سلام.

چند روز پیش یکی از دوستان نحوه ایجاد یه Navigation Drawer یا همون منوی بقل رو میخواست یاد بگیره که قرار شد براش یه تاپیک کامل بزنم .

روش های ایجاد یک Navigation Drawer یا Sliding Menu به شرح ذیل هست :

استفاده از لایبری های آماده ، که نمونه هایییش رو در زیر براتون قرار دادم .

jfeinstein10/SlidingMenu

nicolasjafelle/SherlockNavigationDrawer

اگر در گوگل سرچ هم بزنید بیشتر  هم وجود داره .

روش دوم ساخت یک Navigation Drawer هست با استفاده از کتابخانه خود اندروید و به صورت دست ساز.

خوب در آموزش های استاد آقاجانی استفاده از این نوع لایبری ها که آماده هستن داده شده ، پس ما آموزش ساخت یک Navigation Drawer دست ساز رو میدیم .

برای ساخت این منو ابتدا لایبری ساپورت ورژن 4 رو به پروژه اضافی میکنیم .

بعد یک لایه جدید در ریسورس هاتون اضافی کنید مثلا به اسم main_root.xml 

حالا یک لایه دیگه به نام main.xml و یک لایه دیگه هم به نام navigation_drawer.xml

حالا به ترتیب براتون میگم که این لایه ها دقیقا چیه .

ابتدا لایه main.xml داخل این لایه  میتونید صفحه بندی هاتون روانجام بدید دقیقا این همون لایه ای هست که همیشه ما توش UI رو درست میکنیم یا به عبارتی  لایه Activity .

لایه  navigation_drawer.xml  هم لایه مربوط به منو شماست که با توجه به نیازی که دارید طراحی میکنید .

خب تا اینجاش ما کار خاصی انجام ندادیم و فقط لایه هامون رو درست کردیم ، در  navigation_drawer   layout  یه نکته وجود داره و اون این هست که شما باید در لایه ی پدر بهش gravity بدید مثل کد زیر :

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="@dimen/sliding_menu_width"
    android:layout_height="match_parent"
    /////////////////////////////////////// android:layout_gravity="left"
    android:layout_marginLeft="20dp"
    android:background="#2a2a2a"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="48dp"
        android:background="#be2f23"
        android:orientation="vertical" >

        <ImageView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:scaleType="centerInside"
            android:src="@drawable/menu" />
    </LinearLayout>

    <ListView
        android:id="@+id/lst"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        tools:listitem="@layout/view_category" >

    </ListView>

</LinearLayout>

خب همونطور که در کد بالا مشخصه ما به لایه پدر یه gravity دادیم این مقدار برای این هست که مشخص کنیم منوی ما از کدوم ور باید بیاد ینی منو سمت راست باشه یا سمت چپ .

میریم سراغ main_root.xml ، شبیه به چسب عمل میکنه و 2 لایه دیگه رو به هم میچسبونه .

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

 <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <include layout="@layout/main" />

    <include layout="@layout/navigation_drawer " />

</android.support.v4.widget.DrawerLayout>

خب توجه داشته باشید که همونطور که قبلا هم گفته شد شما باید از لایبری ساپورت ورژن 4 استفاده کنید .

خب اینجا 2 تا خط داریم که یکم نامهوم شاید باشه 

  <include layout="@layout/main" />

   <include layout="@layout/navigation_drawer " />

اولین خط لایه main  و دومین خط لایه navigation_drawer رو داخل لایه main_root اصطلاحا include میکنه یا میاره توش .

خب کار ما تموم شد با xml میریم سراغ کد نویسی 

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

 setContentView(R.layout.main);

مینویسید 

 setContentView(R.layout.main_root);

و با استفاده از کد زیر Drawer Layout رو بهش معرفی میکنیم :

 DrawerLayout drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);

البته این معرفی هیچ لزومی نداره همین الان شما میتونید با بردن انگشت به گوشه صفحه ، منو خودتون رو باز کنید ولی ما میخوایم یکم قشنگ تر کار کنیم و یه دکمه هم تعریف کنیم که وقتی روش کلیک شد منو باز و بسته بشه  :)

حالا یه دکمه تعریف میکنیم و براش Onclick رو Override میکنیم و کد زیر رو توش منویسیم :

       btn.setOnClickListener(new OnClickListener() {

		@Override
		public void onClick(View v) {
			if(drawerLayout.isDrawerOpen(Gravity.LEFT)){
				drawerLayout.closeDrawers();
			}else {
				drawerLayout.openDrawer(Gravity.LEFT);
			}
		}
	});

خوب توضیح کد بالا هم بدیم که دیگه کار تمومه ، if(drawerLayout.isDrawerOpen(Gravity.LEFT)) یعنی اگر منو باز بود با استفاده از این کد ببندش drawerLayout.closeDrawers();  و در غیر این صورت با استفاده از این کد زیر بازش کن :

 drawerLayout.openDrawer(Gravity.LEFT);

یه نکته باقی میمونه داخل کدی که برای باز کردن یا بستن استفاده کردیم یه پرانتز هست که توش نوشتیم Gravity.LEFT، این یعنی منوی ما از کدوم سمت باز شده یا باید بشه .

پس داخل پرانتز همیشه مقدارش برابر جهت منوی شما هست که سمت چپ قرار داره یا راست .

آخر سر شما هم چین چیزی دارید :

 

 

موفق و سربلند باشید :)

 

+4 0
ممنون از آموزشتون دوست عزیز، اینجا یک مشکل پیش میاد: اگر شما 4 اکتیویتی داشته باشید باید توی همه ی 4 تا اکتیویتی کدهایی که در منو ها ( میتونه 2 تا باشه ) اجرا میشه رو بنویسید، مثلا اگر در سمت چپ منوی تنظیمات داشته باشید و 500 خط کد تنظیماتتون باشه، باید در هر 4 اکتیویتی 500 خط کد رو کپی کنید. راهی برای حل این مشکل پیدا کردید؟ (10 سال پیش)
+5 0
شما میتونید کد ها رو در کلاس دیگه ای بنویسید و در کلاس های مختلف فقط رفلکت اون کلاس رو استفاده کنید (10 سال پیش)
0 0
توی کار با View ها مطمئن نیستم به صرفه باشه، مثلا اگر در صفحه منو انیمیشن داشتیم و یا از عکس متحرک استفاده شده بود کار سخت میشد.در کل این روش خیلی سبک تر از Library ها کار میکنه و این مزیت بزرگیه (10 سال پیش)
+1 0
یکم روش وقت بزاری میتونی اون مشکلم حل کنی ، 100% لایبری ها هم حجم بیشتری به برناممون میدن و هم یاعث کاهش سرعت اجرا میشن (10 سال پیش)
0 0
سلام ممنون از آموزش، یه سوال! چطور میشه توی گزینه های NavDrawer زیر منوهای دیگه تعریف کرد جوری که وقتی تاچ بشه اون زیر منوها نمایش داده بشن؟ (10 سال پیش)
+1 0
با استفاده از لیست ویو کشویی یا همون expandable listview (10 سال پیش)
0 0
چطور می تونم width مربوط به navigationDrawerرو تنظیم کنم( 10% یا 40% یا 50%)؟ هرچقدر سعی کردم یا کرش داد یا جواب نداد (10 سال پیش)
+2 0
براش مارجین تعریف کنید یا کد جاوا بنویسید (10 سال پیش)
0 0
برای LinearLayout که parent در navigation_drawer.xml هست؟ (10 سال پیش)
+2 0
بله میتونید براش یا سایز دستی وارد کنید یا در دایمنز تعریف کنید یا در کد جاوا نسبت عرض صفحه رو بگیرید و براش کد بنویسید (10 سال پیش)
0 0
چرا DrawerLayout رو برای من شناسایی نمیکنه؟!! (10 سال پیش)
0 0
android support هم اضافه کردم. (10 سال پیش)
+1 0
ارورتون رو بنویسید ببینیم مشکل چیه (10 سال پیش)
0 0
javac آیا کامل کد رو نوشتی؟ و Android Support V4 رو هم ایمپورت کردی؟ (10 سال پیش)
+1 0
آره همه کارا رو کردم فایده نداره کلاس drawerLayout رو نمیشناسه و میگه خودت بسازش یا اضافه کن..... فعلا برگشتم به لایبرری sliding menu تا سرفرصت ببینم حرف حسابش چیه:) (10 سال پیش)
0 0
من می خوام برای بخش نمایش و ارسال پیام از Navigation Drawer استفاده کنم، اما چند مشکل وجود داره 1. با درگ در سمت راست Screen باز می شه 2. با باز شدم منو ، صفحه کنار بره و منو نمایس داده بشه مثل منو "مارکت بازار" (10 سال پیش)
+2 0
جوابتون رو تو یه پاسخ پایین تر میدم ، میتونید از این روش استفاده کنید : به جای DrawerLayout از SlidingPaneLayout استفاده کنید . (10 سال پیش)
0 0
این کامپوننت (Drawer Layout)وجود نداره من ساپورت لایبرری v7رو هم ایمپورت کردمDrawer Layout کجاست؟ (9 سال پیش)
0 0
android.support.v4.widget.DrawerLayout از روی این فکر کنم بفهمید کدوم supportLibrary هست :)) (9 سال پیش)
0 0
الان مخاطبت کیه؟ (9 سال پیش)
0 0
okفهمیدم!!! (9 سال پیش)
0 0
okفهمیدم!!! (9 سال پیش)
0 0
مشکل حل شد دوست من (9 سال پیش)
0 0
ایمپورت کرده بودم فکر میکردم باید تو کامپوننت ها باید چیزی اضافه شه (9 سال پیش)
0 0
من برنامه "اینجاست" شما را دیدم. واقعا زیبا بود. فقط یه سوال واسه من پیش اومده... چطور میشه هم tab navigation و هم Sliding Navigation را پیاده سازی کرد؟ از این نظر این سوال را میپرسم که xml مربوط به main activity باید دارای lay out android.support.v4.view.ViewPager باشد و از طرفی همونظور که شما عنوان کردید برای sliding navigation باید drawer layout گذاشت. میشه یه راهنمایی کنید بی زحمت که دقیقا باید چیکار کرد؟ تو سایت خاصی سورس خاصی میشناسید که برای Api8 به بالا مثل شما اینکارو کرده باشه که بتونم استفاده کنم؟ من اومدم از view pager استفاده کردم و واسه sliding navigation از کتابخانه ای که استاد یاد دادن استفاده کردم اما متاسفانه وقتی که منوی کشویی میاد بیرون روی اکتیویتی نمیاد و تب رو میزنه کنار که قشنگ نیست... (9 سال پیش)
+1 0
اگر از روشی که من اسلاید منو رو اضافی کردم برید مشکل کنار زدن اکتیوتی حل میشه ، برای تب هم میتونید از امکانات خود viewPage استفاده کنید که یه تب اختصاصی در اختیارتون قرار میده . اگر از همین روش برای پیاده سازی منو و از روشی که در لینک آموزش رو قرار دادم برای اکشن بار استفاده کنید هیچ مشکلی یش نمیاد و در نسخه 10 به بالا هم پشتیبانی میشه . (9 سال پیش)
0 0
کسی میدونه چطور میشه نویگشن بار یکسان رو برای اکثر اکتیویتی ها ست کرد؟ (9 سال پیش)
+1 0
اگر قراره کاملا یکسان باشه یک Layout به نام actionbar بسازیر و در بقیه Layout ها ایمپورتش کنید، در کد هم یک اکتیویتی بسازید که تمام کارهای actionbar رو انجام بده و بقیه اکتیویتی ها رو از این اکتیویتی extends کنید (9 سال پیش)
0 0
سلام دوستان.برای ساخت این navigation menu از ساپورت ورژن 4 استفاده میشه و برای اکشن بار از ورژن 7 .حالا اگه بخوای از دوتاش استفاده کنی این دو تا باهم تداخل پیدا نمیکنن؟یه لینک واسه دانلود ورژن 4 بدید ممنون میشم. (9 سال پیش)
+1 0
نیازی نیست هر دو تا لایبری رو ایمپورت کنید ، داخل لایبری ورژن 7 نسخه ورژن 4 هم موجود هست و مشکلی پیش نمیاد (9 سال پیش)
0 0
پس چرا میگن وقتی ورژن7 ایمپورت میکنی باید ورژن 4 از تو پوشه libs پروژه حذف کنی که اکلیپس ایراد نگیره.دز ضمن project build target اگر بزارم روی اندروید 4 دیگه برای 2.2 اجرا نمیشه؟منظورم از همونجاس که کتابخانه رو ایمپورت میکنی. (9 سال پیش)
0 0
من یه مشکل عجیب واسم پیش اومده اینکه همه کارا رو درست انجام میدم. ولی اسلاید منو رو وقتی میکشم جلو خودش برمیگرده عقب و ثابت نمی مونه. یه سوال دیگه اینکه چ طوری میشه جای لمس رو واسه بیرون کشیدن اسلاید منو بیشتر کرد یعنی الان اگه باید دست رو ببریم به سمت گوشه و بکشم . بتونیم از وسط گوشی هم اگر دست رو به سمت مقابل کشیدم اسلاید منو بیرون بیاد. (9 سال پیش)
0 0
من برنامه رو بردم داخل کلاسی از اکتیویتی که همه کلاس ها از اون کلاس extends شده باشند . تو این حالت دیگه دکمه منو کار نمیکنه و با لمس کردن هم منو باز نمیشه فقط انگار اکتیویتی اکشنبار ظاهر میشه کسی میدونه چرا ؟ و چطوری میتونم اکشن بار رو ببرم تئ همه ی اکتیویتی ها ؟ (9 سال پیش)
+2 0
اگر درست انتقال داده باشه هیچ مشکلی پیش نمیاد و کار انجام میشه . (9 سال پیش)
0 0
ببخشید یه سوال داشتم، اینجور که فهمیدم برای هر صفحه ای که در موبایل قراره نشون بدم یه لایه root.xml و مثلن یه لایه main.xml و یه لایه navigationDrawer.xml باید بسازم، یعنی برای هر صفحه باید 3 تا ازینا بسازم، راهی نیست root.xml رو نسازم ؟ یعنی هردفعه root.xml رو نسازم که 2 تا لایه ی دیگه رو داخل قرار بدم ، راهی هست ؟ مثلن وقتی چند صفحه دارم و همشون قراره منو کشویی رو داشته باشن . مرسی (9 سال پیش)
0 0
این اسلایدمنو یه مشکلی داشت ،وقتی که رو فضای خالی اسلاید منو کلیک میکنی هر چیزی که زیر اون ،روی لایه اصلی برنامه باشه رو کلیک میکنه ! (9 سال پیش)
0 0
با سلام دوستان من تو قسمت آخر گیر کردم وقتی دکمه رو تعریف میکنم و میرم قسمت کد نویسی مثل همیشه که رو setOnClickگزینه ایمپورت بود الان نیست مشکل چیههههه؟؟ماوس رو روش میگیر گزینه های change.....اینا میاره (9 سال پیش)
0 0
خیلی خوبه! دمت گرم... (9 سال پیش)
0 0
@محمدحسین جان تشکر بابت این آموزش خوبت. منم مشکل @n.sina رو دارم یعنی موقعی که اسلاید منو بازه، وقتی روی فضای خالی کلیک میکنم روی لایه زیرین کلیک میخوره!! راه حلش چیه؟ (9 سال پیش)
0 0
اقای کاشی زاده میشه بگید دقیق چجوری اون کلاسی که برای این کدها تعریف کردیم ببریم تو یه اکتیویتی دیگه و اوانجا بعد از ساختن یک شی از اون کلاس اونا اجرا کرد مرسی بابت اموزشتون (9 سال پیش)
+1 0
متوجه منظورتون نشدم ، لطفا بیشتر توضیح بدید دقیقا منظورتون چی هست . (9 سال پیش)
0 0
ما برای این اسلاید ده تا باتن درس می کنیم و برای هرکدوماش یه کاری... خوب این کدها را میخاییم تو یه کلاس جدید درس کنیم و بزاریم و برای هرصفحه که بخواهیم اونا را بزاریم و همینطور بحث لایه ها که کجا باید ست شوند توی همه صفحه ها یا تو همون کلاس ساخته شده....مرسی (9 سال پیش)
+1 0
باید لایه رو با کد در EnhancedActivity ست کنید و براش یک متد بنویسید و در هر صفحه ای که مورد نظرتون هست فقط متد رو صدا کنید و براش آیتم های مورد نظر رو قرار بدید . (9 سال پیش)
0 0
سلام آقای کاشی زاده طبق دستور شما بارها بارها انتحان کردم ولی کرش میکنه روی این خط setContentView(R.layout.main_root); اصلا معلوم نیست این مین روت چیه (8 سال پیش)
0 0
بعد از چند ساعت تلاش بالاخره حل شد ممنون (8 سال پیش)
0 0
میگم من لایه main م بصورت لند اسکیپ هسش و میخام اسلاید منو را از پایین بیارم بالا ولی هرووقت gravity را به bottom تغییر میدم کرش میکنه میگه left or right بنظرتون باید چیکار کنم؟ (8 سال پیش)
0 0
از لایبرری jfeinstein10 هم ک استاد گفتن کار کردم ولی فایده نداره چجوری میشه اسلاید از پایین باز بشه ایا؟ (8 سال پیش)
0 0
همه ی کد ها رو تو کلاس Activity Enhanced نوشتم چون همه ی اکتیویتی هام از این کلاس اکستندز شدن برای لایه روت باید چی کار کنم تو قسمت include ؟ (8 سال پیش)
0 0
سلام لینک ببخشید من از راه شما رفتم اما این ارورو میده : You must specifiy a valid layout reference. The layout ID @layout/navigation_drawer is not valid. و برنامه کرش میکنه !!! چرا آخه؟ (8 سال پیش)
0 0
این تاپیک مال 2 سال پیشه و بهتره شما برید سمت متریال دیزاین البته اگه میخواید کاستوم بسازید که هیچی لینک (8 سال پیش)
0 0
از این روش در اندروید استادیو هم میشه استفاده کرد؟ (7 سال پیش)
 برای این سوال 20 پاسخ وجود دارد.
پاسخ به سوال 
override  10 سال پیش
+2 0

من از روشی که در مستندات گوگل هست استفاده کردم به نظرم روش شما آسونتره حالا چند تا سئوال دارم:

من لایه ی مربوط به navigation_drawer.xml به این صورت تعریف کردم:

 <?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" />

<ListView
android:id="@+id/drawer_list"
android:layout_width="220dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="#BfE4F1FE" />

</android.support.v4.widget.DrawerLayout>

در آموزش های گوگل از فرگمنت استفاده کرده و من برای اینکه بتونم لایه ی اکتیویتی اصلی رو زیر منوی کشویی نشون بدم ،در اکتیویتی اصلی که از کلاس NavigationDrawer ارث بری شده از کد زیر استفاده کردم:

  @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

FrameLayout frameLayout = (FrameLayout)findViewById(R.id.content_frame);
View activityView = G.inflater.inflate(R.layout.main_layout, null,false);
frameLayout.addView(activityView)

اکتیویتی اصلی به عنوان یه هدایتگر به بخش های مختلف استفاده میشه ولی در این حالت با انتخاب  هر اکتیویتی که با دیتابیس سروکار داره برنامه کرش میکنه علت از کجا میتونه باشه؟

 سئوال2 : کاربرد این کدها چیه؟

 /**
* When using the ActionBarDrawerToggle, you must call it during
* onPostCreate() and onConfigurationChanged()...
*/

@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
// Sync the toggle state after onRestoreInstanceState has occurred.
mDrawerToggle.syncState();
}


@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Pass any configuration change to the drawer toggls
mDrawerToggle.onConfigurationChanged(newConfig);
}

سئوال 3: برای اینکه در روش شما navigationDrawer روی ActionBar قرار نگیره باید چیکار کرد؟

 

 

 

+4 0
خب شما با استفاده از روشی که گفتم نیاز به فرگمنت ندارید و خودش منو روی اکتیویتی میاد اکتیویتی هم از زیرش پیدا هست و زیر اکشن بار هم قرار میگیره و مشکلی هم نداره این کد هایی هم که نوشتید مربوط به تنظیمات وضعیت منو هست که اگر از روش بالا استفاده کنید دیگه لزوی نداره از این کد ها استفاده کنید . (10 سال پیش)
0 0
خیلی ممنون، میشه بیشتر توضیح بدید تنظیمات وضعیت منو، یعنی دقیقاً چی مثلاً توی اون کامنتی که ترجمه ش میشه "هر گونه تغییری در تنظیمات رو به drawer toggls میفرسته " این یعنی چی؟بعد این روش خیلی آسونتره پس چرا گوگل رفته کار رو سخت کرده مزیت روش گوگل چیه؟ (10 سال پیش)
+2 0
من از این روش استفاده نکردم ولی به احتمال زیاد تنظیماتی که تو این شما میتونید استفاده کنید حتما بیشتر هست مثلا این حالی که من نوشتم منو میوفته روی اکتیوتی و زیر اکشن بار شاید شما بخواید منو اکتیویتی رو هل بده و بقلش بیوفته یا مثلا اکشن بار هم جا به جا به بشه . اطلاعات دقیق از این روش ندارم متاسفانه :| (10 سال پیش)
0 0
اتفاقاً روش گوگل هم منوی کشویی فقط به همین صورت ظاهر میشه چون در هر دو روش از لایبری ساپورت ورژن 4 استفاده شده. (10 سال پیش)
پاسخ به سوال 
کاشی زاده  10 سال پیش
+8 0

دوستانی که دوست دارند اسلادینگ منوشون به شکل زیر باشه میتونن از روش زیر که لینکش رو گذاشتم استفاده کنن : 

.

.

لینک

0 0
آیا راهی برای ثابت نگه داشتن منو در حالت باز وجود داره؟(بسته نشه) (9 سال پیش)
0 0
متوجه منظورتون نشدم اگر ممکن هست مثالی واضح تر بزنید . (9 سال پیش)
0 0
در برخی مواقع می خوام SliningPaneLayout در هنگام اجرای Activity در حالت Open باشه و بسته نشه (9 سال پیش)
0 0
در برخی مواقع می خوام SliningPaneLayout در هنگام اجرای Activity در حالت Open باشه و بسته نشه (9 سال پیش)
0 0
در onResume بهش بگید باز بشه ، البته من اینطوری برداشت کردم از توضیحی که دادید. (9 سال پیش)
0 0
ببین محمدحسین جان ، منو رو درگمی کنیم و باز می شه ، مارجین هم در نظر گرفتیم که مثلا تا یک چهارم صفحه باز بشه ، مساله اینجاست که در حالت LandScape نباید بسته بشه (9 سال پیش)
+1 0
اگر منظورتون این هست که تو حالت لند اسکیپ بچسبه کنار بقیه صفحه و ثابت باشه ، بهتره یه layout مخصوص landscape بسازی و توش به جای اینکه از SliningPaneLayout استفاده کنید یه لایه ثابت قرار بدی اینطوری تو حالت portrait منوی کشویی دارید و هم در حالت landscape منوی شما به صورت ثابت قرار میگیره . (9 سال پیش)
0 0
آخه یک حالت پورتریت هم دارم و نمی خوام کد اضافی بزنم (9 سال پیش)
0 0
من اینو که معرفی کردین تست کردم درست و حسابی کار نمی کنه.:( (9 سال پیش)
0 0
اگر از اندروید ورژن 2.2 بخوایم استفاده کنیم باید چیکار کنیم؟ (9 سال پیش)
0 0
مشکلی نداره میتونید استافده کنید ، فقط نسخه Sdk target رو روی 15 تنظیم میکنیم و min Sdk رو 8 بذارید (9 سال پیش)
0 0
دوستان من منظور ازین جمله رو نفهمیدم: - برای ساخت این منو ابتدا لایبری ساپورت ورژن 4 رو به پروژه اضافی میکنیم - تقریبا خط 14 از بالا می شه. (9 سال پیش)
0 0
من برنامم رو با اندروید 2.2 ساختم. اینطور که متوجه شدم لایبرری ساپورت برای این هست که کسانی که اندرویدشون پایین تر از 4 مثلا هست هم بتونن استفاده کنن از این قابلیت. آیا لازم هست من این لایبرری رو اضافه کنم با این که برنامم رو با اندروید 2.2 ساختم؟ (9 سال پیش)
0 0
اگر به ابزاری مثل اکشن بار و یا اسلادینگ منو نیاز دارید که در ورژن های زیر 4 بتونید استفاده کنید باید لایبری رو اضافی کنید . (9 سال پیش)
0 0
@محمد حسین - خیلی ممنون از آموزش هاتون، من کدها رو بدون مشکل اجرا کردم فقط سوالی که دارم اینه که چطور این کدها رو تو یک کلاس مثل BaseMenuActivity تعریف کنم تا بتونم اکتیویتی های دیگه رو از اون ارث بری کنم؟(برای داشتن منو در تمام صفحات برنامه) مشکل اصلی هم در include کردن لایه مورد نظر در root هستش چون اینطوری مجبورم برای هر اکتیویتی یک root هم بسازم و داخلش drawer و activity رو include کنم که فکر نکنم جالب باشه. خیلی ممنون میشم اگه با کد توضیح بدید. (9 سال پیش)
0 0
باید به جای استفاده از xml همه کد ها رو در جاوا بنویسید و لایه ها رو در جاوا به هم بچسبونید ،یکم پیچیده هست ولی امکان پذیر (9 سال پیش)
پاسخ به سوال 
ayhan  9 سال پیش
+1 0

با سلام دوستان من آموزش sliding رو طبق کلیپ پیش رفتم میخوام بهش 3تا tabاضافه کنم ممنون میشم کمکم کنین و بگین چه کدهایی رو کجا برنامه وارد کنم ممنون میشم

پاسخ به سوال 
سعید  9 سال پیش
+1 0

برای من ارور

DrawerLayout must be measured with MeasureSpec.EXACTLY.
Exception details are logged in Window > Show View > Error Log

میده چجوری حلش کنم؟ممنون.

0 0
به جای فیل پرنت بهش عرض وراتفاع دادم مشکل حل شد.اما خوب اینجوری که به مشکل بر میخورم!راحل حل چیه؟ (9 سال پیش)
پاسخ به سوال 
behnam2000  9 سال پیش
0 0

من فیلم اموزشی ساخت sliding menu شما رو دیدم و کاملا بدون مشکل پیاده سازی کردم.فقط یه مشکله کوچکی وجود داره به اینصورت که با زدن دکمه به درستی باز و بسته میشه و با دست هم تا زمانی که دستمان را از روی صفحه نکشیده ایم به سمت مورد نظر میتونیم بکشیم اما وقتی باز هست نمیدونم چرا نمیشه به طرف داخل با دست کشید و تنها زمانی بسته میشه که در یک جای صفحه تاچ میشه.

پاسخ به سوال 
parand  9 سال پیش
0 0

با سلام

من از slidingmenu  که شما آموزش دادین استفاده کردم مشکلی هم نداره

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

اگر از این راه برم صفحه به چپ و راست کشیده میشه ولی منو ها را نشان نمیده

viewPager = (ViewPager) findViewById(R.id.viewPager);
        tabsAdapter = new TabsFragmentPagerAdapter(getSupportFragmentManager());
        viewPager.setAdapter(tabsAdapter);

ولی وقتی از کد زیر استفاده میکنم این خط را error میده  actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS

این هم کد کل صفحه :

package view;

import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.view.Menu;

public class HomePageActivity extends FragmentActivity implements ActionBar.TabListener {

    private ViewPager                viewPager;
    private ActionBar                actionBar;
    private TabsFragmentPagerAdapter tabsAdapter;
    private String[]                 days = new String[]{ "menu1", "menu2", "menu3", "menu4", "menu5", "menu6", "menu7", "menu8", "menu9" };


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.home_activity);

       /* viewPager = (ViewPager) findViewById(R.id.viewPager);
        tabsAdapter = new TabsFragmentPagerAdapter(getSupportFragmentManager());
        viewPager.setAdapter(tabsAdapter);*/

         tabsAdapter = new TabsFragmentPagerAdapter(getSupportFragmentManager());
         viewPager = (ViewPager) findViewById(R.id.viewPager);
         viewPager.setAdapter(tabsAdapter);
         actionBar = getActionBar();
         actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
         for (int i = 0; i < 9; i++) {
             actionBar.addTab(actionBar.newTab().setText(days[i]).setTabListener(this));
         }
         viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {

             @Override
             public void onPageSelected(int arg) {
                 // TODO Auto-generated method stub
                 actionBar.setSelectedNavigationItem(arg);
             }


             @Override
             public void onPageScrolled(int arg0, float arg1, int arg2) {
                 // TODO Auto-generated method stub

             }


             @Override
             public void onPageScrollStateChanged(int arg0) {
                 // TODO Auto-generated method stub

             }
         });

    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        // getMenuInflater().inflate(R.menu., menu);
        return true;
    }


    @Override
    public void onTabReselected(Tab tab, FragmentTransaction ft) {
        // TODO Auto-generated method stub

    }


    @Override
    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        // TODO Auto-generated method stub

    }


    @Override
    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
        // TODO Auto-generated method stub

    }

}

با توجه به اینکه اگر از library که استاد اموزش دادند استفاده کنم مشکلی پیش نمیاد ولی بدلیل سرعت و حجم کم ترجیح میدم از آموزش شما استفاده کنم

و سوال بعدی این هست که برای ساخت پروژه از اندروید 2.2 استفاده کردم ولی بعد از اضافه کردن library که شما معرفی کردید

(android-support-v7-appcompat) وقتی که توی قسمت properties پروژه نگاه میکنم تبدیل شده به اندورید 4 و اگر تغییر بدم به error بر میخورم  وقتی که برنامه را روی نسخه اندروید 2.2 نصب کردم متوجه شدم ، برای این شکل چه راه حلی دارید؟؟

 

پاسخ به سوال 
red_sky  9 سال پیش
0 0

سلام

آقای کاشی زاده ممنون از آموزش خوبتون

من طبق همین آموزش شما اسلایدینگ منو را میسازم و به خوبی اجرا میشه ولی یک مشکلی داره اون هم این که وقتی اسلایدینگ منو باز هست و روی یک جای خالی از لایه اسلایدینگ منو کلیک میکنم روی آیتم هایی که زیر اون لایه یعنی روی صفحه اصلی هست کلیک میشه

چطور باید این مشکل را برطرف کنم؟

+1 0
در فایل xml مربوطه روی لایه مورد نظر کلیک کنید و قابلیت Clickable بودن رو true کنید . (9 سال پیش)
0 0
خیلی ممنون (9 سال پیش)
0 0
با سلام در navigation_drawer قسمت زیر رو چطور پیاده کنم(view_category؟؟ - یه مثال) ممنون (9 سال پیش)
0 0
منظورم قسمت مربوط به لیست ویو هست آخه تو آموزش بخاطر ارور این قسمت(لیست ویو) رو شما پاک کردید (9 سال پیش)
0 0
آقای کاشی زاده با تشکر بنده میخوام از دیتابیس اطلاعاتی رو تو لیست ویو نشون بدم پروژه آموزشی شما رو (سورس Actionbar_SlidingMenu شما رو) ایمپورت کردم حالا هرکاری میکنم یه لیست ویو از ویجت های اندروید تو یه xml قرار بدم ارور میگیره ممکنه راهنمایی کنید(تم همون تم Theme.AppCompatو تنظیمات اندروید تو ایکلیپس هم 2.2) است (9 سال پیش)
0 0
چه اروری میده از صفحه ای که ارور میده عکس بگیرید و در پاسخی جداگانه قرار بدید . (9 سال پیش)
0 0
منم همین مشکل reza1234 رو دارم، با این تم وقتی listview نمیونم به layout اضافه کنم و error میده. (9 سال پیش)
پاسخ به سوال 
سجاد  8 سال پیش
0 0

سلام و خسته نباشید به خاطر ویدئوی مفیدتون. خب الان یه سوال برام پیش اومده. میخوام بدونم من توی اسلاید منو اومدم چند آیتم انتخاب کردم که با زدن اون آیتم ها اکتیویتی های مربوط به اون باز بشن. الان من چطور باید اینکار رو انجام بدم؟ چون آقای آقاجانی هم در این مورد چیزی نگفتن.

+1 0
خیلی راحت مثل تمام آیتم های دیگه ای تعریف میکنیم اون آیتم ها هم تعریف کنید و براشون متد onClickLisener را بنویسید (8 سال پیش)
0 0
امكانش هست يه نمونه واسم قرار بديد. البته فقط اضافه كردن آيتم منو رو نميخوام. اينكه بشه با كليك روي اون آيتم اكتيويتي جديد باز بشه. اگه ممكنه يه نمونه قرار بديد، خيلي سر اين موضوع گير كردم و نياز فوري هم دارم. (8 سال پیش)
+1 0
اگه طبق این آموزش ها کار را انجام داده باشید که نباید توی اضافه کردن آیتم مشکلی داشته باشید توی فایل xml با استفاده از textview و و اگه مایل به نمایش آیکن هم کنار متن باشید imageview آیتم ها را میسازید حالا تووی اکتیویتی که این اسلاید منو داخلش استفاده شده مثل همیشه که یک textview را معرفی میکنید اینجا هم دقیقا همونطوری معریفیش میکنید هیچ فرقی با قبل نداره و براش متد onClickListener را فراخوانی میکنید و با استفاده از intent اکتیوتی مورد نظرتون را اجرا میکنید (8 سال پیش)
0 0
آها يعني توي لايه اي كه اسلايد منو طراحي شده آيتم ها رو قرار بدم واسشون clickListener تعيين كنم و با startInetnt صداشون كنم؟! اگه اينقدر راحت باشه كه خيلي عالي ميشه. باشه امتحان ميكنم اگه نشد باز مزاحم ميشم. ممنون از لطفتون. (8 سال پیش)
+1 0
بله به همین راحتیه (8 سال پیش)
0 0
خسته نباشید. ببخشید مزاحم شدم. خب من الان همینکار رو کردم. و واسه اسلایدمنو آیتم هایی قرار دادم و طبق گفته ی شما توی همون اکتیویتی که اسلایدمنو رو ساختم واسش رویداد کلیک قرار دادم. طبق کد زیر: LinearLayout layout_home = (LinearLayout) findViewById(R.id.layout_home); layout_home.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { Intent intent = new Intent(getApplicationContext(), ActivitySecond.class); startActivity(intent); } }); layout_home در واقع یه Linear Layout هست که شامل آیکون و عنوان آیتم هست. ولی اجرا کردم به فورس کلوز انجامید. (8 سال پیش)
0 0
ارور logcat را بخونید تا ببینیم مشکل کجاست (8 سال پیش)
پاسخ به سوال 
mohsen-jj  8 سال پیش
0 0

سلام دوستان . من دارم رو یه پروژه کار می کنم که صفحاتش fragement هستند . دوتا sliding menu پیدا کردم روی اکتیویتی هایی که از Activity ارث بری می کنند درست کار میکنن ولی روی fragement ها نه .

مثلا یکی از این sliding menu ها توی این خط ارور میده و هرکاری کردم مشکلش حل نشد :

کسی راه حل رو میدونه ؟

 menu.attachtoActivity();


پاسخ به سوال 
سجاد  8 سال پیش
0 0

red_sky

و واسه اسلایدمنو آیتم هایی قرار دادم و طبق گفته ی شما توی همون اکتیویتی که اسلایدمنو رو ساختم واسش رویداد کلیک قرار دادم. طبق کد زیر: 

        LinearLayout layout_home = (LinearLayout) findViewById(R.id.layout_home);
        layout_home.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {
                Intent intent = new Intent(getApplicationContext(), ActivitySecond.class);
                startActivity(intent);
            }
        });

layout_home در واقع یه Linear Layout هست که شامل آیکون و عنوان آیتم هست. ولی اجرا کردم به فورس کلوز انجامید.

پاسخ به سوال 
tiam  8 سال پیش
0 0

با تشکر از آقای کاشی زاده اگه براتون ممکن ایجاد اسلاید منو در چند صفحه رو یه مثال بزنید ممنون میشم

پاسخ به سوال 
118674  8 سال پیش
0 0

با سلام خدمت جناب کاشی زاده - با تشکر از آموزشتون - من پروژه را موفق اجرا کردم اما میخواهم نویگیشن منو از سمت راست باز بشه

+1 0
سلام ، ویژگی layout_gravity لایه navigation_drawer.xml رو Gravity.Right بذار و وقتی میخوای بازش کنی بنویس drawerLayout.openDrawer(Gravity.Right); (8 سال پیش)
0 0
خیلی ممنون داداش - درست شد !!!!! (8 سال پیش)
پاسخ به سوال 
118674  8 سال پیش
0 0

سلام و خسته نباشید - چطور میشه وقتی نویگیشن منو باز میشه روی اکشن بار بیفته ؟ با تشکر

پاسخ به سوال 
khanbeiki  8 سال پیش
0 0

سلام . من عین فیلم رفتم اما چندتا مشکل دارم .

1- در اکشن بار طبق تصویر از دو طرف خالی میمانه. و چون از اندروید استودیو استفاده میکنم اکشن بار پیش فرض پشتش میمانه. اینو چ کنم ؟
2- اسلایدینگ منو اصلا حرکت نمیکنه و با اجرای برنامه باز میمانه و بسته نمیشه .
3- وقتی روی دکمه کلیک میکنم بسته ک نمیشه هیچ ، کرش میکنه.

البته لازم بذکر است اون لایبریی ها را اظافه نکردم چون در اندروید استودیو AppCompad وجود داشت بطور پیش فرض.

0 0
کسی نمیدونه داستان من چیه ؟ (8 سال پیش)
0 0
لیوتی که اکشن بار در اون قرار داره رو براش padding و margin ست کردین ! (8 سال پیش)
پاسخ به سوال 
hossein  8 سال پیش
0 0

آقای کاشی زاده و دوستان وقت بخیر 

من تمام کامنت ها و پاسخ ها رو خوندم تمام اینا که گفته شد درباره ورژن 2 هست حالا اگه همون ابتدا بخوایم از ورژن 4 استفاده کنیم و نیاز به اضافه کردن کتابخونه نباشه باید چطور یه drawer menu بسازیم؟

یکم راهنمایی و  یا یه آموزش معرفی میکنید درباره این کار در ورژن 4

تشکر

پاسخ به سوال 
afr_msb  8 سال پیش
0 0

سلام ممنون آقای کاشی زاده بابت آموزشتون

فقط یه مشکل اساسی من فرم rootاز main و slidingmenu ارث میبرد این تا اینجا . حالا میخوام روی main و sliding menu دکمه تعریف کنم که با کلیک روی آن عملیات خاص خود را انجام دهد . من آمدم و در xml های مربوطه دکمه ها را گذاشتم حالا کداشونا مثلا main تو اکتیویتیه خودش بذارم اجرا نمیشه باید چکار کنم ؟

 

0 0
چند نکته وجود داره : اکتیویتی شما باید با root.xml که شامل main.xml و sliding_menu.xml هست SetContent شده باشه ، بعد از اون میتونید از هر دوی اینها findView کنید ترتیب بالا و پایین بودن include شدن از لایه root مهم هست ، در صورتی که بهترتب رعایت نشه کلیک شدن روی لایه انجام نمیشه ، کلیک هایی که روی لایه sliding_menu.xml انجام میشه اگر توی اون قسمت OnclickListener تعریف نشده باشه کلیک از لایه رد میشه و روی لایه زیرین تاثیر میزاره ، که یک راه حل ساده این هست که برای لایه کلی در sliding_menu.xml کلیک لیستنر بصورت خالی تعریف کنید (8 سال پیش)
0 0
خب من متوجه شدم همه کدها باید در action bar نوشته شود . تو تعریف root اون لایه ای که آخر کلیک را قبول میکنه . چه کنم که هم main هم navigation هر دو کلیک را قبول کنند؟ (8 سال پیش)
پاسخ به سوال 
Criss  7 سال پیش
+1 0

در لایبری استاد برای jfeinstein قابلیت TOUCH_MODE وجود داشت که میشد مقدار حساسیت رو برای SlidingMewnu رو مقداری برابر FullScreen قرار داد در DrawerLayout میتونید این مقدار رو به دلخواه تغییر بدید :

 
drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);

try {
Field mDragger = drawerLayout.getClass().getDeclaredField("mLeftDragger");//mRightDragger or mLeftDragger based on Drawer Gravity
mDragger.setAccessible(true);
ViewDragHelper draggerObj = (ViewDragHelper) mDragger.get(drawerLayout);

Field mEdgeSize = draggerObj.getClass().getDeclaredField("mEdgeSize");
mEdgeSize.setAccessible(true);
int edge = mEdgeSize.getInt(draggerObj);

mEdgeSize.setInt(draggerObj, edge * 3); //any int value you want
} catch (Exception e) {
e.printStackTrace();
}

 

پاسخ به سوال 
شیخی  6 سال پیش
0 0

سلام آقای کاشی زاده و ممنون بابت آموزشهای خوبتون

من یه مشکلی دارم در اجرای اسلاید منوها؛ وقتی روی منوی سمت چپ کلیک میکنم خود به خود بسته میشه!

پاسخ به سوال 
116236  6 سال پیش
0 0

سلام

من به این ارور برخورد کردم:

error parsing XML:unbound prefix

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

اینم اسکرین شات صفحه. ممنون میشم  اگه کمکم کنید.

پاسخ به سوال 
hamcalas  6 سال پیش
+1 0

این طور امتحان کنید

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.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"

tools:openDrawer="start">

    <include layout  layout="@layout/main"/>
    <include layout  layout="@layout/menu"/>



</android.support.v4.widget.DrawerLayout>

 

0 0
سلام. خیلی ممنون. درست شد. فقط من نفهمیدم چه چیزی رو تغییر دادید. اگه خط اول کد که اضافه کردید مد نظرتونه، من با اون هم امتحان کرده بودم ولی جواب نداده بود. (6 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .