PDA

View Full Version : ساخت sliding menu در سمت راست بوسیله navigation drawer (آموزش)



gilas1368
شنبه 25 بهمن 1393, 17:27 عصر
سلام به همه دوستان عزیز
خب باتوجه به اینک خیلی از دوستان مشکل sliding menu در سمت راست رو دارن، و چندتا از دوستان هم توی پیام خصوصی خواستن ک کد sliding menu RTL رو براشون تکمیل کنم ک از همینجا بایت تاخیرم ازشون عذرخواهی میکنم.
لذا بهتر دونستم ی برنامه با ی نمونه عملی این مشکل دوستان رو برای همیشه حل کنم

لازم به ذکره من از Navigation Drawer استفاده کردم و از اندروید استدیو هم استفاده میکنم.


خب میریم سواغ آموزش

ی پروزه بسازید

1- داخل لایه activity_main هرچی هست رو پاک کنین و کدای زیر رو بهش اضافه کنین:


<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">




<!-- The main content view -->
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent"/>




<!-- The navigation drawer -->




<ListView android:id="@+id/left_drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="right"
android:choiceMode="singleChoice"
android:divider="@android:color/transparent"
android:dividerHeight="0dp"
android:background="@android:color/white"/>




</android.support.v4.widget.DrawerLayout>
این کداها همون Navigation drawer ما هستن ک داخلش ی لیست قرار داره

2- کدای زیر رو به فایل string موجود در پوشه value اضافه کنین:

<string-array name="planets_array">
<item>Mercury</item>
<item>Venus</item>
<item>Earth</item>
<item>Mars</item>
<item>Jupiter</item>
<item>Saturn</item>
<item>Uranus</item>
<item>Neptune</item>
</string-array>
این آرایه آیتم های روی لیست مون رو تشکیل میده

3- حالا به قسمت کدها میریم و متغیرهای زیر رو به ابتدای برنامه اضافه میکنیم:

private String[] mPlanetTitles;
private DrawerLayout mDrawerLayout;
private ListView mDrawerList;

4- و در آخر کدای زیر رو ب تابع oncreate و بعد از متد setContentView اضافه میکنیم:

mPlanetTitles = getResources().getStringArray(R.array.planets_arra y);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerList = (ListView) findViewById(R.id.left_drawer);




// Set the adapter for the list view
mDrawerList.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, mPlanetTitles));
mDrawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
if (position >= 0) {
Toast.makeText(getBaseContext(), String.valueOf(position), Toast.LENGTH_LONG)
.show();
mDrawerList.setItemChecked(position, true);
setTitle(mPlanetTitles[position]);
mDrawerLayout.closeDrawer(mDrawerList);
}
}
});

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

اینم فایل های برنامه:

Sliding menu RTL (http://www.4shared.com/rar/3aOz2KB9ce/SlidingMenuRTL.html)

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

اگ سوال یا مشکلی داشتید در خدمتم.

hamedg1366
شنبه 25 بهمن 1393, 17:49 عصر
مرسی گیلاس جان

کدهاتون بسی زیبا هستن ؛

Ebrahimkh
شنبه 25 بهمن 1393, 18:13 عصر
سلام
یه سوال


اگه بخواهیم آیکنها در سمت راست نوشته قرار بگیرند چیکار باید کنیم

خواهش یه نگاه هم به اینجا بندازید:قلب:
http://barnamenevis.org/showthread.php?485761-%D9%82%D8%B1%D8%A7%D8%B1-%D8%AF%D8%A7%D8%AF%D9%86-%D8%A2%DB%8C%DA%A9%D9%86-%D8%AF%D8%B1-%D8%B3%D9%85%D8%AA-%D8%B1%D8%A7%D8%B3%D8%AA

dalmif
شنبه 25 بهمن 1393, 21:00 عصر
گیلاس جان ممنون از آموزشت.
من قبلا این کار رو کردم اما الان لازم دارم که پس از کلیک بر روی یک آیتم به صورت خودکار منوی سمت راست بسته بشه

gilas1368
شنبه 25 بهمن 1393, 21:19 عصر
سلام
یه سوال


اگه بخواهیم آیکنها در سمت راست نوشته قرار بگیرند چیکار باید کنیم

خواهش یه نگاه هم به اینجا بندازید:قلب:
http://barnamenevis.org/showthread.php?485761-%D9%82%D8%B1%D8%A7%D8%B1-%D8%AF%D8%A7%D8%AF%D9%86-%D8%A2%DB%8C%DA%A9%D9%86-%D8%AF%D8%B1-%D8%B3%D9%85%D8%AA-%D8%B1%D8%A7%D8%B3%D8%AA


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

اما برای چیزی ک میخاید باید ی لایه برای لیست ویو طراحی کنین

اگ وقت پیدا کنم ی نمونه براتون میذارم

gilas1368
شنبه 25 بهمن 1393, 21:22 عصر
گیلاس جان ممنون از آموزشت.
من قبلا این کار رو کردم اما الان لازم دارم که پس از کلیک بر روی یک آیتم به صورت خودکار منوی سمت راست بسته بشه

dalmif عزیز الان هم روی هرکدوم از آیتم های لیست ویو بزنید منو بسته و Title اکتیویتی تغییر میکنه

اگ من بد متوجه شدم بگید دقیقا چی میخاید تا کمکتون کنم اگ در توانم باشه

moh355
یک شنبه 10 اسفند 1393, 09:40 صبح
چرا واسه من موقع تعریف متغیر به صورت زیر خطا میده . DrawerLayout نمیشناسه .
private DrawerLayout mDrawerLayout;

gilas1368
یک شنبه 10 اسفند 1393, 11:30 صبح
رفرنسش رو اضافه کردید به IDEاتون؟
از چ محیطی برای کدنویسی استفاده میکنین؟
احتمالا حدس من اینه ک از ایکلیپس دارید استفاده میکنید
چون معمولا این خطاها رو ایکلیپس میده

moh355
یک شنبه 10 اسفند 1393, 15:12 عصر
رفرنسش رو اضافه کردید به IDEاتون؟
از چ محیطی برای کدنویسی استفاده میکنین؟
احتمالا حدس من اینه ک از ایکلیپس دارید استفاده میکنید
چون معمولا این خطاها رو ایکلیپس میده

منظورتون از اضافه کردن رفرنس چیه ؟ من تازه اندروید شروع کردم خیلی حرفه ای نیستم:خجالت: . محیط برنامه نویسی هم android studio..ممنون بابت جوابتون

saso_008
پنج شنبه 14 اسفند 1393, 14:07 عصر
منم همین مشکل دارم میشه کمک کنید لطفا
من با ایکلیپس مینویسم

gilas1368
پنج شنبه 14 اسفند 1393, 17:10 عصر
تمام کدهاى جاواتون رو بذاريد

saso_008
پنج شنبه 14 اسفند 1393, 17:34 عصر
کدهای جاوا دقیقن همون کدهای خودتونه فقط DrawerLayout رو نمیشناسه !!!

saso_008
پنج شنبه 14 اسفند 1393, 17:44 عصر
کدهای جاوا دقیقن همون کدهای خودتونه فقط DrawerLayout رو نمیشناسه !!!

gilas1368
پنج شنبه 14 اسفند 1393, 17:53 عصر
ideاتون پيشنهادى بهتون نميده؟
نبايد چنين مشکلى براتون پيش بياد

saso_008
پنج شنبه 14 اسفند 1393, 21:55 عصر
میگه باید کلاسشو بنویسم
ببخشید شما از چه کتابخونه ای استفاده کردین؟

gilas1368
جمعه 15 اسفند 1393, 09:14 صبح
دوستانی که با drawerlayout مشکل دارن این تاپیک (http://stackoverflow.com/questions/17046443/android-import-drawerlayout-cannot-be-resolved) رو مطالعه کنن.

meysam jahedi
جمعه 15 اسفند 1393, 10:05 صبح
نمیدونم چرا اینجوری خطا میده

03-02 16:00:12.398: E/AndroidRuntime(1737): FATAL EXCEPTION: main
03-02 16:00:12.398: E/AndroidRuntime(1737): android.app.SuperNotCalledException: Activity {com.example.slidmenu2/com.example.slidmenu2.MainActivity} did not call through to super.onCreate()
03-02 16:00:12.398: E/AndroidRuntime(1737): at android.app.ActivityThread.performLaunchActivity(A ctivityThread.java:1922)
03-02 16:00:12.398: E/AndroidRuntime(1737): at android.app.ActivityThread.handleLaunchActivity(Ac tivityThread.java:1981)
03-02 16:00:12.398: E/AndroidRuntime(1737): at android.app.ActivityThread.access$600(ActivityThre ad.java:123)
03-02 16:00:12.398: E/AndroidRuntime(1737): at android.app.ActivityThread$H.handleMessage(Activit yThread.java:1147)
03-02 16:00:12.398: E/AndroidRuntime(1737): at android.os.Handler.dispatchMessage(Handler.java:99 )
03-02 16:00:12.398: E/AndroidRuntime(1737): at android.os.Looper.loop(Looper.java:137)
03-02 16:00:12.398: E/AndroidRuntime(1737): at android.app.ActivityThread.main(ActivityThread.jav a:4424)
03-02 16:00:12.398: E/AndroidRuntime(1737): at java.lang.reflect.Method.invokeNative(Native Method)
03-02 16:00:12.398: E/AndroidRuntime(1737): at java.lang.reflect.Method.invoke(Method.java:511)
03-02 16:00:12.398: E/AndroidRuntime(1737): at com.android.internal.os.ZygoteInit$MethodAndArgsCa ller.run(ZygoteInit.java:784)
03-02 16:00:12.398: E/AndroidRuntime(1737): at com.android.internal.os.ZygoteInit.main(ZygoteInit .java:551)
03-02 16:00:12.398: E/AndroidRuntime(1737): at dalvik.system.NativeStart.main(Native Method)

ansaralghaem
چهارشنبه 26 فروردین 1394, 06:18 صبح
سلام دوستان لطفا یکی به من کمک کنه منو کشویی با ز شو با کلید میخوام واسه اندروید 2.1 لطفا کمک کنید من با اندروید استودیو کار می کنم

gilas1368
چهارشنبه 26 فروردین 1394, 07:28 صبح
بیشتر توضیح بدید
من دقیق متوجه نشدم
ینی ی slide menu میخواید ک وقتی روی ی دکمه کلیک میکنید باز بشه؟

tux-world
چهارشنبه 26 فروردین 1394, 09:14 صبح
آموزش خوبیه فقط چند تا نکته داره اون هم اینکه کلیدی اگه بخوایید برای باز شدنش بزارید چیکار باید بکنید. منظورم چه اکشن بار باشه چه اکشن بار دستی و اینکه در صورتی که کاربر بخواد تو صفحه عادی چیزی بزاره صفحه داشته باشه مثلا با منو چیکار کنه. این آموزش فقط منو هستش :لبخندساده: تستش هم که کردم رو آیتمها که کلیک میکنید اتفاقی نمی افته یعنی Toast کار نمیکنه

gilas1368
چهارشنبه 26 فروردین 1394, 10:30 صبح
آموزش خوبیه فقط چند تا نکته داره اون هم اینکه کلیدی اگه بخوایید برای باز شدنش بزارید چیکار باید بکنید. منظورم چه اکشن بار باشه چه اکشن بار دستی و اینکه در صورتی که کاربر بخواد تو صفحه عادی چیزی بزاره صفحه داشته باشه مثلا با منو چیکار کنه. این آموزش فقط منو هستش :لبخندساده: تستش هم که کردم رو آیتمها که کلیک میکنید اتفاقی نمی افته یعنی Toast کار نمیکنه

دوست و استاد خوبم tux-world عزیز
از اینکه برنامه رو نصب و تست کردید خیلی ممنون و سپاسگزارم، منت گذاشتید بر این حقیر
اما چیزی که هست من دقیق متوجه منظور شما نشدم

اگ مجبت کنین و بیشتر توضیح بدید ممنون میشم

tux-world
چهارشنبه 26 فروردین 1394, 10:38 صبح
خواهش میکنم. وقتی رو آیتم ها کلیک میشه من Toast گذاشتم نشون نمیداد و اینکه تو نسخه های پایین اندروید هم مشکل داره البته من اصلاحش کردم و برات میفرستم. دستت درد نکنه :لبخندساده:

http://uplod.ir/2lssuny81lc1/Aquarium.zip.htm

gilas1368
چهارشنبه 26 فروردین 1394, 10:48 صبح
ممنون از لطفتون و وقتی ک گذاشتید
راستش من روی اندروید2.2 تستش کردم و کار کرد
اما بازم خیلی ممنونم :)

ansaralghaem
چهارشنبه 26 فروردین 1394, 14:07 عصر
بیشتر توضیح بدید
من دقیق متوجه نشدم
ینی ی slide menu میخواید ک وقتی روی ی دکمه کلیک میکنید باز بشه؟
سلام دوست عزیز یه اسلاید منو میخوام مثل برنامه باد صبا که هم با کشید باز میشه و هم با زدن دکمه بالا سمت راست واسه اندروید 2.1 به بالا همچنین من با اندروید استودیو کار می کنم خیلی فوریه اگر لطف کنید راهنمایی کنید ممنون میشم

gilas1368
چهارشنبه 26 فروردین 1394, 18:31 عصر
شما با کد زیرو اگ توی رویداد کلیک دکمه اتون فراخوانی کنین اون منو باز میشه

mDrawerLayout.openDrawer(mDrawerList);

و با کد زیر میتونید منو رو ببندید:

mDrawerLayout.closeDrawer(mDrawerList);

ansaralghaem
چهارشنبه 26 فروردین 1394, 22:57 عصر
با تشکر از شما مشکلم حل شدی چیزی که من میخواستم رو پیدا کردم یک آموزش بسیار عالی بدون نیاز به کتابخانه خاصی در اینجا هست
http://answers.uncocoder.com/question/4026/%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%D8%A7%D8%B3%D9%84%D8%A7%DB%8C%D8%AF%DB%8C%D9%86%D A%AF-%D9%85%D9%86%D9%88-%DB%8C%D8%A7-Navigation-Drawer-%D8%AF%D8%B3%D8%AA-%D8%B3%D8%A7%D8%B2-%D9%88-%D8%AE%D8%A7%D9%86%DA%AF%DB%8C-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-

بازم ممنونم

هزاره سوم
سه شنبه 11 خرداد 1395, 23:10 عصر
واقعا ممنون.این دو روزه متن های زیادی دیدم که یا کدش کار نمیکرد یا من چون تازه کار بودم خوب متوجه نمیشیدم..ولی این تاپیک شما و مخصوصا کد هاتون توی برنامه من کار کرد و خواستم بگم که ممنون.