آموزش ساخت اکشن بار کاملا 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 اضافه کنید.
بسته به نوع پیاده سازیتون ۲ راه برای اضافه کردن اکشن بار دارید.
۱: parent رو در اکتیویتی یک FrameLayout تعریف کنید و بقیه محتویات اکتیویتی رو در یک LinearLayout (میتونه relative یا هرچیزی باشه) قرار بدید و بهش بگید به اندازه سایز اکشن بار Padding داشته باشه.(این روش پیشنهاد میشه)
۲: سایز اکشن بار رو در 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"/>