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

آموزش ساخت اکشن بار کاملا Custom

Hajhosseini  10 سال پیش  10 سال پیش
+17 0

با توجه به اینکه گوگل در 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 رو در زیر اکشن بار باز کرد، میتونید به عنوان نظر درج کنید تا در اولین فرصت پاسخ داده بشه.

0 0
با سلام اگر میشه آموزش ساده و مبتدی اضافه کردن اکشن بار رو بگید (10 سال پیش)
+1 0
این آموزشی که من قرار دادم آموزش ساخت اکشن بار گوگل نیست، ولی هیچ چیزی از اون کمتر نداره ولی اگر مایلید از اکشنبار گوگل استفاده کنید، توی انجمن سرچ کنید، قبلا آموزشش قرار داده شده. (10 سال پیش)
0 0
میشه لینک بدید؟ (10 سال پیش)
+1 0
سلام من اکشن باری ساختم که یه متن داره و عنوان صفحه رو نشون میده و یه دکمه داره که با فشار دادنش NavigationDrawer باز میشه . اما میخوام این اکشن با تو 6 تا اکتیویتی نمایش داده بشه . راهی هست مجبور نباشم کدهای تکراری برای لیستنر بنویسم ؟ دوم اینکه :به چه صورت میشه NavigationDrawer رو در زیر اکشن بار باز کرد ؟ ممنون (10 سال پیش)
 برای این سوال 2 پاسخ وجود دارد. مشاهده پاسخ صحیح
پاسخ به سوال 
Hajhosseini  10 سال پیش
+2 0

 پاسخ صحیح

برای استفاده از اکشن بار در 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 کنید.

پاسخ به سوال 
Hajhosseini  10 سال پیش
+5 0

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


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