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

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

Spirit  12 سال پیش  12 سال پیش
+30 0

سلام

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

 برای این سوال 7 پاسخ وجود دارد.
پاسخ به سوال 
Spirit  12 سال پیش
+17 0

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

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

 

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

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

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

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

آقای 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>
0 0
از بالا margin بده شاید درست بشه (12 سال پیش)
پاسخ به سوال 
Spirit  12 سال پیش
+1 0

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

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

 

 

 

 

 

پاسخ به سوال 
سپهر  12 سال پیش
0 0

من کد 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 سال پیش
+2 0

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

 <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>
0 0
خیلی ممنون از راهنماییت درست شد (12 سال پیش)
پاسخ به سوال 
sadeghbarout  12 سال پیش
+1 0

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

فقط یه نکته ای: چطور میتونیم به کنترل های روی صفحات (مثلا 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");
}
+3 0
کافیه تو همون اکتیویتی ای که Nav Drawer رو در برگرفته ، findViewById کنی ، چرا که include شده و انگار همه ی اون عناصر تو لایه ی اصلی هستن ! (12 سال پیش)
+1 0
ببخشید دیگه یادم رفت تست کنم! الان تست کردم آره جواب داد. ممنون :) (12 سال پیش)
+1 0
D: - به قول JJ فدا ! (12 سال پیش)

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