ساخت NavigationDrawer (آموزش)
با توجه به اینکه قبلا تاپیکی برای ساخت NavigationDrawer توسط محمد حسین عزیز ایجاد شده بوده، نباید این تاپیک ساخته میشد. ولی به دلیل درخواست دوستان و پیچیدگی جزئی در تاپیک های موجود من ساده ترین روش برای این کار رو اینجا درج میکنم.
مرحله اول: ایجاد Layout ها
ابتدا یک Layout به نام activity_main ایجاد کنید ( در این Layout میتونید صفحه اصلی برنامتون رو قرار بدید )
سپس یک Layout به نام navigation_drawer ایجاد کنید که در اون محتوای navigation_drawer رو قرار میدید.
بعد از اون یک Layout به نام main.xml بسازید، این Layout باید دربرگیرنده 2 Layout بالا باشد که میتونید کد مربوطه رو در زیر ببینید:
<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/activity_main" />
<include layout="@layout/navigation_drawer" />
</android.support.v4.widget.DrawerLayout>
برای اینکه عمل اسلاید کردن انجام بشه باید از DrawerLayout استفاده کنیم و برای اضافه کردن اون باید حتما android.support.v4 رو به قسمت BuildPath اضافه کرده باشیم.(آموزش این کار در ویدیو های استاد، و در انجمن وجود دارد)
پس از این میتونیم به navigation_drawer.xml بگیم که از کدوم سمت باید باز بشه، برای این کار در کد navigation_drawer این قسمت رو اضافه کنید:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="right" <====== این قسمت
android:background="#ffffff"
android:gravity="center" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="NavigationDrawer" />
</RelativeLayout>
حالا در کلاس جاوایی که داریم (MainActivity) حتما باید مقدار
setContentView(R.layout.activity_main);
رو به
setContentView(R.layout.main);
تغییر بدیم.
با توجه به کاهایی که انجام دادیم، NavigationDrawer ما آمادست. برای اینکه NavigationDrawer با زدن کلید منو باز بشه هم میتونیم از کد زیر استفاده کنیم:
@Override
public boolean onKeyDown(int keycode, KeyEvent e) {
switch (keycode) {
case KeyEvent.KEYCODE_MENU:
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(Gravity.RIGHT))
drawer.closeDrawer(Gravity.RIGHT);
else
drawer.openDrawer(Gravity.RIGHT);
return true;
}
return super.onKeyDown(keycode, e);
}
مهدی جان از کلید Drawer نمیدونم منظورتون چیه ولی برای باز و بسته کردن و Instance ساختن کافیه یک DrawerLayout بسازید و بعد findViewById کنید:
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); drawer.openDrawer(Gravity.RIGHT);
این کد رو شما هرجایی که استفاده کنید، NavigationDrawer باز میشه.
Delina جان با اکشن بار کاملا سازگاره، ولی اگر مثل من از اکشن بار گوگل استفاده نکنید و اکشن بار شخصی خودتون رو داشته باشید باید یک تغییرات کوچکی در Layout ها بدید.
سلام،
آقای حسینی خیلی ازتون ممنونم که این تاپیک رو ایجاد کردید، مشکلم براحتی حل شد .
اگر بشه در این تاپیک در مورد طراحی و زیباسازی navigation drawer هم صحبت کرد، بنظرم تاپیک پر طرفداری خواهد شد .
بازم ازتون ممنونم
کار خیلی ساده ایه محمد جان
تعیین ساز NavigationDrawer :
میتونید از این لینک استفاده کنید، خیلی ساده ت.
خط بالا:
در صورتی که از اکشن بار استفاده کنید که باید طبق آموزش های اکشن بار (Shadow) رو تغییر بدید.
در صورتی که از اکشن بار خودتون استفاده میکنید هم میتونید یک LinearLayot زیر اکشن بار بگذارید و بهش رنگ بدید.
آیتم های داخل NavigationDrawer :
راه ساده(اصلا پیشنهاد نمیشه): میشه تمام آیتم هارو دانه دانه در Layout مورد نظرتون که به عنوان navigation_drawer استفاده کردید اضافه کنید.
راه معمولی: میتونید یک LinearLayout در بالای یک لیست ویو اضافه کنید و قسمت بالا رو بسازید و در زیر اون یک لیست ویو داشته باشید که آداپتر مخصوص خودش رو (آیتم ها) داشته باشه.
راه مناسب: فقط یک لیست ویو داشته باشید، قسمت بالا رو به عنوان Header در لیست ویو تنظیم کنید و قسمت پایین رو به عنوان آیتم ها در نظر بگیرید
راه حرفه ای: یک آداپتر داینامیک بنویسید که Type پذیر باشد، یعنی شما هر نوع تایپی که بهش بدید رو بسازه. کار خیلی سختی نیست ولی یکم زمان میبره. قابلیت ها: 1: شما در تمام برنامه هاتون میتونید ازش استفاده کنید 2: مانند گوگل میتونید هر آیتم لیست ویو رو به شکل دلخواهتون استفاده کنید 3: میتونید این Library رو به یک Madule تبدیل کنید و بعد در تمام پروژه هاتون ازش استفاده کنید و بسیاری قابلیت های دیگر.
اقا مرسی، فقط من یه مشکلی داره، این که وقتی نویگیشن دراور باز هست، و توی صفحه اصلی دکمه ای وجود داره که زیر نویگیشن دراور قرار میگیره، بعد از تپ کردن رو دکمه (یعنی در حالتی که نویگیشن بازه، و دکمه زیرش قرار گرفته) ، عمل میکنه. در صورتی که باید وقتی نویگیشن باز باشه، دیگه به صفحه زیرین واکنشی نشون نده.
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .
