بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

آموزش پیاده سازی Navigation Drawer

مدیریت گفتگو
Spirit 12 سال پیش
آخرین تغییر: 12 سال پیش

سلام

چطور میتونیم توی برنامه از Navigation Drawer استفاده کنیم؟

نظرات

پاسخ‌ها 7

Spirit 12 سال پیش

مرحله اول - ابتدا یک 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);

خب اگه نکته ای باقی موند بگید.

 

نظرات

Spirit 12 سال پیش
کدها رو کپی نکنید ، خودتون بنویسید ، ویرایشگر کمی مشکل داره کدها ممکنه مشکل دار شده باشن.
حامد 12 سال پیش
من با پروژه آموزشی گوگل کار کردم که نمیتونستم view را شخصی کنم ..... مرصی
Spirit 12 سال پیش
آماده شد.
حامد 12 سال پیش

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

حالا چطور میشه به جای fragment از همون activity استفاده کرد؟
آیا برای نمایش باید کلاس اکتیویتی را جدا نوشت و درون کلاسی که از فراگمنت extends شده قرار داد؟

نظرات

Spirit 12 سال پیش
بعضی جاها دیدم داخل کلاس activity یه کلاس از fragment ایجاد میکنن ، و بعضی هم کلاس fragment رو جدا میکنن ، خودم هنوز کار نکردم بطور جدی ، وگرنه مثالی میزاشتم براش ، سرج کنید مثالهای زیادی پیدا میشه براش.
سپهر 12 سال پیش

آقای 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>

نظرات

Spirit 12 سال پیش

شما باید actionBar رو در فایل Activity_main_root اضافه کنید ، به همین خاطر باید viewی پدر حاظر یعنی android.support.v4.widget.DrawerLayout رو یه پله بیاری پایین تر یعنی بشه بچه یه view دیگه مثل linearLayout.

( قابل توجه استاد گرامی : من از کامنت alu فهمیدم شما سوالی کردی ، مگه نباید سوال شما هم برای من تو پانل کاربری میومد؟)

 

 

 

 

 

نظرات

سپهر 12 سال پیش

من کد 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 رو کجای این کد باید قرار بدم

نظرات

Spirit 12 سال پیش

میشه این طوری نه اونطوری :)

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

نظرات

سپهر 12 سال پیش
خیلی ممنون از راهنماییت درست شد
sadeghbarout 12 سال پیش

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

فقط یه نکته ای: چطور میتونیم به کنترل های روی صفحات (مثلا 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");
}

نظرات

مجتبی یگانه 12 سال پیش
کافیه تو همون اکتیویتی ای که Nav Drawer رو در برگرفته ، findViewById کنی ، چرا که include شده و انگار همه ی اون عناصر تو لایه ی اصلی هستن !
sadeghbarout 12 سال پیش
ببخشید دیگه یادم رفت تست کنم! الان تست کردم آره جواب داد. ممنون :)

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