آموزش پیاده سازی Navigation Drawer
مرحله اول - ابتدا یک layout با با نام فرضی activity_main_root.xml ایجاد کنید و کد زیر رو توی اون قرار بدید.
<?xml versi encoding="utf-8"?>
<android.support.v4.widget.DrawerLayoutxmlns: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 -->
<include layout="@layout/activity_main"/>
<!-- The navigation drawer -->
<include layout="@layout/drawer_layout_right"/>
<include layout="@layout/drawer_layout_left"/>
</android.support.v4.widget.DrawerLayout>
توی layout بالا ما در داخل کامپوننت NavigationDrawer سه عدد layout از طریق include قرار دادیم.
که اولین مورد صفحه اصلی ما رو شامل میشه و دو مورد دیگه هم که از اسمشون پیداست که مربوط به Drawer های راست و چپ میشن.
مرحله دوم - الان باید سه layout معرفی شده رو ایجاد کنید.
activity_main.xml
<?xml versi encoding "utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientati >
</LinearLayout>
drawer_layout_left.xml
<?xml versi encoding "utf-8"?>
<?xml versi encoding "utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="200dp"
android:layout_height="match_parent"
android:layout_gravity="left"
android:orientati >
</LinearLayout>
drawer_layout_right.xml
<?xml versi encoding "utf-8"?>
<?xml versi encoding "utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="200dp"
android:layout_height="match_parent"
android:layout_gravity="right"
android:orientati >
</LinearLayout>
همونطور که میبینید هر سه layout ما از یه LinearLayout ساده ساخته شدن ، این یعنی ما میتونیم هر view ی دلخواهی رو توی Drawer هامون قرار بدیم!
- به خصیصه جاذبه و عرض (layout_gravity , layout_width ) مربوط به Drawer ها هم دقت کنید.
مرحله سوم - برای اینکه از Drawer هامون استفاده کنیم (باز و بسته کردن) باید view اصلی رو که در layout اصلی قرار داره مانند یه view ی معمولی تعریف کنیم :
DrawerLayout drawerLayout =(DrawerLayout) findViewById(R.id.drawer_layout);
اینم یه متد ساده برای باز کردن Drawer سمت راست (چپ رو هم نمیگم!) :
privatevoid drawerRight(){
if(drawerLayout.isDrawerOpen(Gravity.RIGHT)){
drawerLayout.closeDrawer(Gravity.RIGHT);
}else{
drawerLayout.openDrawer(Gravity.RIGHT);
}
}
مرحله چهارم - خب حالا فرض کنیم ما یه listView یا یه button یا هر view ی دیگه ای توی یکی از Drawer هامون قرار دادیم الان چجوری باید اونو معرفی و تعریف کنیم؟
درسته که layout اصلی ما activity_main_root.xml هستش و ما view ی مورد نظرمون رو توی یه layout دیگه ایجاد کردیم ولی به مانند این هستش که view ی ما در لایه اصلی قرار داره :
ListView lv =(ListView) findViewById(R.id.listView1);
خب اگه نکته ای باقی موند بگید.
برای نشان دادن صفحات درباره ما و راهنمایی و... از fragment ها استفاده میکنیم
حالا چطور میشه به جای fragment از همون activity استفاده کرد؟
آیا برای نمایش باید کلاس اکتیویتی را جدا نوشت و درون کلاسی که از فراگمنت extends شده قرار داد؟
آقای spirit عزیز ممنون از آموزش عالیت
یه سوال داشتم با این روشی که شما پیاده سازی کردی من تنها یک action bar به ativity_main اضافه کردم
حالا زمانی که این navigation drawer رو میکشم بیرون میفته روی کل صفحه یعنی میاد روی actionbar ولی من میخوام که بیفته زیر actionbar مثل بازار

Activity_main
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="top|left"
android:orientati >
<com.markupartist.android.widget.ActionBar
android:id="@+id/actionbar"
/>
<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"
>
<ir.mediastudio.first_project.ViewPagerIndicatorView
android:id="@+id/viewpager_indicator_view"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</RelativeLayout>
</LinearLayout>
Activity_main_root
<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 -->
<include layout="@layout/activity_main" />
<!-- The navigation drawers -->
<include layout="@layout/drawer_layout_left" />
</android.support.v4.widget.DrawerLayout>
شما باید actionBar رو در فایل Activity_main_root اضافه کنید ، به همین خاطر باید viewی پدر حاظر یعنی android.support.v4.widget.DrawerLayout رو یه پله بیاری پایین تر یعنی بشه بچه یه view دیگه مثل linearLayout.
( قابل توجه استاد گرامی : من از کامنت alu فهمیدم شما سوالی کردی ، مگه نباید سوال شما هم برای من تو پانل کاربری میومد؟)
من کد Activity_main_root رو به صورت زیر تغییر دادم
<LinearLayout>
<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" >
</android.support.v4.widget.DrawerLayout>
<!-- The main content view -->
<include layout="@layout/activity_main" />
<!-- The navigation drawers -->
<include layout="@layout/drawer_layout_left" />
</LinearLayout>
حالا کد action bar رو کجای این کد باید قرار بدم
میشه این طوری نه اونطوری :)
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<!-- اینجا -->
<android.support.v4.widget.DrawerLayout
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<!-- The main content view -->
<include layout="@layout/activity_main" />
<!-- The navigation drawers -->
<include layout="@layout/drawer_layout_left" />
</android.support.v4.widget.DrawerLayout>
</LinearLayout>
ممنون بالاخره فرصتی دست اومد تا تستش کنم . خیلی خوب بود.
فقط یه نکته ای: چطور میتونیم به کنترل های روی صفحات (مثلا button1) دسترسی پیدا کنیم؟
من با inflate کردن نتونستم :
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_root);
drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View activity = inflater.inflate(R.layout.activity_main, null);
Button btn = (Button) activity.findViewById(R.id.button1);
btn.setText("sadegh");
}
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .