آموزش ساخت اکشن بار کاملا Custom
با توجه به اینکه گوگل در API های پایین قابلیت راست به چپ کردن Actionbar رو نداره و برای استفاده، باید کتابخانه AppCompat رو اضافه کنید که با اکلیپس سازگار نیست، و کلی مشکلات دیگه که دوستان با اکشن بار گوگل داشتن، اینجا یک اکشن بار به صورت کاملا خصوصی میسازیم.
(توجه) در صورتی که بخواید اکشن بار کاملا داینامیک باشه باید چندین Listener تعریف کنید، Menu بسازید و به صورت داینامیک تعریف کنید که Menu ها اضافه بشن و برای تمام View های اکشن بار به صورت دستی Listener تعریف کنید وکلی کار دیگه. اینجا فقط طریقه ساخت یک اکشن بار ساده رو آموزش میدیم.
ابتدا در قسمت Layout ها، یک فایل به نام actionbar.xml بسازید.
با توجه به اینکه ما یک نوع اکشن بار داریم که نمیخوایم تغییرات زیادی در اون ایجاد کنیم، یکی در اینجا کفایت میکنه ولی اگر میخواید اکشن بارتون در هر صفحه تفاوت های ساختاری داشته باشه باید چند xml متفاوت بسازید.(پیشنهاد میشه فقط با کد در اکشن بار تغییر ایجاد کنید و از چند xml استفاده نکنید)
در فایل xml دیزاینتون رو اضافه کنید.
نمونه :
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="@dimen/actionbar_first_linear" android:baselineAligned="false" android:orientation="horizontal" android:layout_alignParentTop="true" android:id="@+id/l1" android:background="#f52267" > <ImageView android:layout_width="56dp" android:layout_height="56dp" android:id="@+id/actionbarMenu" android:src="@drawable/actionbar_menu" android:layout_gravity="left|center_vertical" android:padding="16dp" /> </LinearLayout> </RelativeLayout>
پس از انجام این کار باید اکشن بارتون رو به activity_main.xml اضافه کنید.
بسته به نوع پیاده سازیتون 2 راه برای اضافه کردن اکشن بار دارید.
1: parent رو در اکتیویتی یک FrameLayout تعریف کنید و بقیه محتویات اکتیویتی رو در یک LinearLayout (میتونه relative یا هرچیزی باشه) قرار بدید و بهش بگید به اندازه سایز اکشن بار Padding داشته باشه.(این روش پیشنهاد میشه)
2: سایز اکشن بار رو در actionbar.xml ثابت مشخص کنید و LinearLayout ی که محتوای اکتیویتی رو دربر میگیره رو به زیر اکشن بار انتقال بدید.
نمونه کد روش اول:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/mainLinear"> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="@dimen/actionbar_second_linear" android:layout_alignParentTop="true" android:id="@+id/mainDevider"></LinearLayout> </RelativeLayout> <include layout="@layout/actionbar"/> </FrameLayout>
در صورتی که میخواید اکشن بار رو در تمام اکتیویتی ها داشته باشید، فقط کافیه تا کد زیر رو به اکتیویتی مورد نظر کپی کنید.
<include layout="@layout/actionbar"/>
حالا برای استفاده از View های درون اکشن بار میتونید به راحتی findViewById کنید.
اگر سوالی داشتید، مثلا به چه صورت میشه NavigationDrawer رو در زیر اکشن بار باز کرد، میتونید به عنوان نظر درج کنید تا در اولین فرصت پاسخ داده بشه.





برای استفاده از اکشن بار در 6 اکتیویتی فقط کافیه که یک کلاس به نام ActivityEnhance بسازید، اکتیویتی های دیگر رو از اون اکستندز کنید و کدهای باز و بسته کردن navigation drawer رو در اون قرار بدید و در آخر actionbar.xml رو در layout اون اکتیویتی include کنید. به صورت زیر:
<includelayout="@layout/actionbar"/>
برای اینکه NavigationDrawer زیر اکشن بار باز بشه، باید در لایه ای که این 2 تا قرار دارن، ابتدا یک LinearLayout تعریف کنید و بعد زیر اون DrawerLayout رو تعریف کنید. مثال :
<LinearLayout android:id="@+id/sourceShadow" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" >
<include layout="@layout/actionbar"/>
<android.support.v4.widget.DrawerLayout android:id="@+id/drawer_layout" android:layout_width="fill_parent" android:layout_height="fill_parent" > <include layout="@layout/activity_main" /> <include layout="@layout/sliding_menu"/> </android.support.v4.widget.DrawerLayout> </LinearLayout>
کد بالا به این صورت عمل میکنه که ابتدا اکشن بار اضافه میشه و سپس DrawerLayout زیر اون باز میشه.
نکته: اگر شما از navigation drawer استفاده میکنید باید اکشن بارتون رو در کلاسی که navigation تعریف شده include کنید، اگر از navigation استفاده میکنید میتونید مستقیما در اکتیویتی مورد نظر include کنید.

Mostafadam1 جان یک سمپل براتون درست کردم، ولی چون زمانم خیلی کم بود اصلا دیزاین و ... رو درست نکردم، این سمپل شامل 2 اکتیویتی هست که در هردو میشه بازدن یک دکمه در actionbar نویگیشن دراور رو باز بسته کرد.
برنامه اصلا کامل نیست و فقط هدف یادگیریه.لینک چون از دراپ باکس خودم هست به زودی پاک میشه.
*** از دوستانی که از این سمپل استفاده میکنن خواهش دارم که یک سمپل تروتمیز درست کنن و در یک آپلود سنتر دائمی آپلود کنن که دیگر دوستان هم استفاده کنند. با تشکر ***
لینک دراپ باکس: Link
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .