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

اکشن بار دست ساز و خانگی خود را بسازید + تب (آموزش)

مدیریت گفتگو
کاشی زاده 12 سال پیش
آخرین تغییر: 9 سال پیش

آموزش ویدئویی مخصوص ساخت ActionBar بهمراه Sliding Mneu را از لینک زیر دریافت کنید .

 لینک آموزش


بازهم با شما هستید از سری مجموعه کد های دست ساز و خانگی ;)

خوب تو این سری از آموزش میخوایم نحوه ساخت اکشن بار بدون استفاده از لایبری خارجی و قابل اجرا بر روی همه ورژن های اندروید رو یاد بدیم .

ابتدا لایبری ساپورت ورژن 7 یا همون appcompat  رو به پروژه اضافی کنید تا بتونیم اکشن بارمون رو در همه Api ها استفاده کنیم .

خوب نوبت به ساخت اکشن بار میرسه .

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

در همین تایپک آموزش ساخت اکشن بار های مختلف و امکانات جانبی رو میزاریم.

ابتدا یک لایه جدید در ریسورس ها ایجاد کنید و اسمش رو فرضا action_bar بزارید.

حالا اکشن باری که دوست دارید پیاده کنید رو توی این لایه بسازید (منظور UI اکشن بار هست).

میریم سراغ کلاس اکتیویتی و کد نویسی .

ابتدا کد های زیر رو وارد کنید تا بریم سراغ تعریف عملکرد هر کد :

توجه داشته باشید کلاس اکتیوتی رو از ActionBarActivity اکستندز کنید .

 View view = inflater.inflate(R.layout.action_bar, null);
 ActionBar actionBar = getSupportActionBar();
	actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
	actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
	actionBar.setCustomView(view, new ActionBar.LayoutParams
(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT));

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

در خط دوم اکشن بار رو تعریف میکنیم به همین ترتیب که میبینید و توجه داشته باشید زمانی که خواستید اکشن بار رو ایمپورت کنید حتما android.support.v7.app.ActionBar انتخاب کنید.

در خط بعدی شما با توجه به اینکه فقط یه اکشن بار خالی میخواید بسازید NavigationMode رو در حالت 

 ActionBar.NAVIGATION_MODE_STANDARD

قرار میدید حالت های دیگه برای استفاده از تب هست که بعدا آموزش میدیم .

در خط چهارم DisplayOptions رو از نوع ActionBar.DISPLAY_SHOW_CUSTOM قرار میدیم چون میخوایم یه ویو کاستوم رو بهش بدیم .

در خط پنجم هم ویو مورد نظر رو به اکشن بار نسب میدیم که view  همون لایه ساخته شده هست ، باگی که ممکن در ساخت این اکشن بار وجود بیاد این هست که اکشن بار شما ناقص باشه و کل صفحه رو پوشش نده که با استفاده از این کد که نوشتم این مشکل رفع میشه :

 new ActionBar.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT

در نهایت هم تم برنامتون رو از Theme.AppCompat بگیرید.

خوب به همین سادگی شما یک اکشن بار دست ساز بدون افزودن لایبری های سنگین مثل اکشن شرلوک تونستید بسازید و از همه مهمتر این هست که رو همه نسخه ها جواب میده .

 

در همین تاپیک آموزش استفاده از اکشن بار ها با استفاده از لایه menu  ، ساخت تب با استفاده از اکشن بار ،آموزش ساخت sarchView و ساخت  ActionMod  رو براتون در آینده میذارم .

 

موفق باشید :)

 

 

 

نظرات

jamal2012 12 سال پیش
سلام لایبری ساپورت ورژن 7 چیه؟
کاشی زاده 12 سال پیش
یه لایبری برای اندروید که میتویند داخل فولدر IDE پیدا کنید یا میتونید سرچ کنید و دانلود کنید
jamal2012 12 سال پیش
از کجا دانلود کنم
hamed 12 سال پیش
اگر مباحث تحریم نباشه و بتوانید آن ها را دور بزنید از طریق SDK manager می تونید آن را دانلود کنید در غیر اینصورت در اینترنت جستجو کنید پیدا خواهید کرد.
***ali*** 12 سال پیش
من که راحت اختصاصی شو ساختم.
RojaDev 12 سال پیش
این خط : View view = inflater.inflate(R.layout.action_bar, null) این بخش رو inflate(R.layout.action_bar, null) رو برام خطا میگیره... (The method inflate(byte[]) in the type Inflater is not applicable for the arguments (int, null))
محسن 12 سال پیش
Inflater با i بزرگ نوشته میشه، هرچند از این خط هایی که گذاشتین چیزی مشخص نیس.
محسن 12 سال پیش
اینجا جا نمیشه ، توی پاسخ مشکلو نوشتم
RojaDev 12 سال پیش
یک سوال کمی عمومی تر : توی همچین پروژه هایی minimun sdk ابتدای ایجاد پروژه انتخاب میکنیم بهتره چی باشه؟!
محسن 12 سال پیش
اکشن بار که از api 11 به بعد به اندروید اضافه شد اما اگه از android supprort v7 استفاده بشه مینیموم میتونه 8 هم باشه.
RojaDev 12 سال پیش
وقتی میزارم رو حالت مینیموم و کتابخونه رو ایمپورت میکنم، فایل R جاوا رو حذف میکنه!!!! حتما باید روی اندروید های بالاتر بزارم تو ارور نده؟! بخاطر همین سوال قبلی رو پرسیدم...
محسن 12 سال پیش
تو Android manifest تغییر میدین؟
RojaDev 12 سال پیش
نه...اصلا...وقتی پروژه به این قسمت لینک امپورت میکنم...این خطاها رو میده : لینک و فایل r.java رو هم حذف میکنه...اما تو بعضی از نسخه ها مشکلی نداره...android 3.0 هم همینطوریه!!!
محسن 12 سال پیش
آها ، اینو بذارین رو بالاترین نسخه، چون این مینیموم رو نشون نمیده، بلکه target sdk رو نشون میده
RojaDev 12 سال پیش
مشکل R حل شد... اما بخش پاسخ پایین رو ارور میگیره
محسن 12 سال پیش
inflater رو که تعریف شده. دیگه کلاس Inflater رو از جلوش بردار
abracadabra 11 سال پیش
توی خط دوم اررو میده . getSupportActionBar رو نمیشناسه. لینک
کاشی زاده 11 سال پیش
لینکتون باز نمیشه ! این ارور مربوط به لایبری شما هست احتمالا در ایمپورت کردن لایبری اشتباهی صورت گرفته یه بررسی بکنید اگر به نتیجه نرسیدید ، ارور مربوطه رو برام بفرستید .
abracadabra 11 سال پیش
متشکرم . درست شد. getSupportActionBar رو به getActionBar تبدیل کردم حل شد. ولی روی API 8 که اجرا میکنم ارور میده. ولی روی API 15 بدون مشکل اجرا میشه. ممنون میشم راهنمایی کنین چجور میتونم رو همه API ها اجراش کنم
محسن 11 سال پیش
اگر میخای روی api 8 هم اجرا بشه باید android support v7 رو به پروژت اضافه کنی. و از همون دستور getSupportActionBar استفاده کنی
Delna 11 سال پیش
دوستان من وقتی به پروژم Appcompat 7 اضافه میکنم فایل r.java حذف میشه واز تمام R های پروژه ایراد میگیره.چیکار کنم؟
Delna 11 سال پیش
درسته ولی فکرنمیکنم مشکلم حل کنه مگه اون قسمت که گفتین ساپورت ورژن 4 داره که من اصلا پوشه libs ندارم که بخوام حذفش کنم.
Mir Unknown 11 سال پیش
منم مشکل ایشون دارم
best_programmer 11 سال پیش
من اکشن بار رو ساختم و کامل کار میکنه یه باتن هم گذاشتم که وقتی میرنی بازش میکنه.حالا سوال: برنامه هایی مثل گوگل پلی استور وقتی اون ایمج ویو(علامت نویگین درائر)رو میزنی یه انیمیشنی روش اجرا میشه و وقتی میبندی دوباره آیکون نویگیشن درائر با یه انیمیشنی بسته میشه. چطور این رو اجرا کنم؟مرسی
کاشی زاده 11 سال پیش
ببیند شما دارید یه ویو کاستوم میسازید پس تو این حال باید خودتون براش انیمیشن بسازید یا اینکه از اکشن بار خود گوگل استفاده کنید که باید برید در موردش مطالعه کنید .
best_programmer 11 سال پیش
درسته. به نظر شما ساختن اکشن بار کاستوم به غیر از حجم پایین تر چه مزیت دیگه ای داره که از این روش استفاده کنیم. آیا توجیهی براش وجود داره؟
کاشی زاده 11 سال پیش
همونطور که از اسمش پیداست ، این قابلیت رو به شما میده تا هر چیزی که بخواین رو توی اکشن بار تغییر بدید . مهمترین قابلیتش هم همینه .
Mostafadam1 11 سال پیش
محمد حسین بعد از اینکه این کارهای بالا رو انجام دادم. حالا باید توی اندروید منیفست هم تغییری بدم؟؟ اخه الان که پروژه رو اجرا می کنم ازم خطا میگیره که support-v7-appcompat] Could not find android-support-v7-appcompat.apk!
Mr7 11 سال پیش
سلام.بچه ها اصلا انگار کلاسی بنام ActionBarActivity وجود نداره
hossein626 11 سال پیش
سلام. من از این روش استفاده کردم .به نظر من که روش خوبیه. فقط یه مشکلی دارم اینه که یک تکست ویو دارم که به عنوان تایتل اکتیوتی استفاده می کنم. این تایتل باید داینامیک باشه و با توجه به اکتیویتی قبلی تغییر کنه. آیا در این روش میشه این کار را انجام داد؟
کاشی زاده 11 سال پیش
اکشن بار رو در EnhancedActivity تعریف کنید و از اونجا در هر اکتیویتی مقدار تایتل رو عوض کنید .
Mostafadam1 11 سال پیش
آیا میشه از این اکشن بار که خودتون آموزش دادی و Navigation drawer دست ساز که اونم خودتون آموزش دادی به طور همزمان استفاده کرد؟ آخه یکیش ساپورت 4 میخواد یکی 7
کاشی زاده 11 سال پیش
بله ، فقط لایبری ساپورت appcompat رو اضافه کنید خودش شامل ورژن 4 هم میشه.
Mostafadam1 11 سال پیش
خب من اینکارو کردم ولی دیگه ورژن چهار رو اینگار نمیشه ازش چیزی ایمپورت کرد :( میگم کلا واسه این دو کار یعنی اسلاید منو و اکشن بار چه تغییراتی باید توی منیفست انجام بشه؟
کاشی زاده 11 سال پیش
هر تا آموزشش موجود هست میتونید مطالعه کنید به ترتیب ،http://answers.uncocoder.com/question/6053 و لینک
Mostafadam1 11 سال پیش
همه ی اینا رو مو به مو رفتم. ولی هر بار یه اروری میده :((
مجتبی 11 سال پیش
من با لایبرری داخل sdk پروژه رو ساختم ارور زیاد میداد اما وقتی ایبرری که محمد حسین در اول تاپیک لینکشو داده دانلود کردم و پروژه رو ساختم ارور ها بر طرف شد شاید مشکل شما هم همین باشه هم تو ورژن استاد جواب داد هم ورژن 22.3
Mostafadam1 11 سال پیش
منم لایبری ایشون رو دانلود کردم الان navigation رو ساختم بدون مشکل. ولی وقتی ساپورت 4 رو حذف میکنم و ساپورت 7 رو ایمپورت میکنم واسه اکشن بار ارورها شروع میشه .
حمید زمانی 11 سال پیش
محمد حسین جان ، کد کاملا درست کار میکنه ولی یه مشکل کوچیک دارم باهاش اونم اینکه : وقتی اکتیویتی رو اجرا می کنم حدود 1 ثانیه یا کمتر اکشن بار به حالت نرمال خودشه و بعد استایلی که ما تعریف کردیم رو بخودش میگیره ، برای حل این مشکل باید چیکار کنم؟
New Style 11 سال پیش
ببخشید یه مشکل : وقتی متد دکمه ی menu رو تو اکتیویتی تعریف می کنم برای اینکه بعدش متد on click listener رو بهش اضافه کنم اروری نمیگیره ولی وقتی از امولیتور اجرا میکنم force close میده
کاشی زاده 11 سال پیش
ارورتون رو بررسی کنید ببنید چی هست ، اگر متوجه نشدید ارور رو در پاسخ جداگانه در همین تاپیک درج کنید.
نام نیک :) 11 سال پیش
خیلی خوبه دستتون درد نکنه ، ممنون بابت آموزش خوبتون خدا خیرت بده :)
قندروید 11 سال پیش
عــــــــــــالی بود؛ عالی! دمت گرم.
miladjalali.ir 11 سال پیش
سلام من از این آموزش استفاده کردم! ولی وقتی میرم توی یه اکتیویتی دیگه اکشن بار از کار میفته و کار نمیده! چطوری باید درستش کنم؟ اصلا چطوری باید برای هر اکتیویتی یک لایه جدید اکشن بار ست کنم؟ ممنونم
hiemdall 11 سال پیش
من هم مشکل شما رو دارم و بعد از پرسیدن فقط یک نفر جواب داد اون هم یک جواب اشتباه بود امیدوارم اینجا بشه جواب رو به دست اورد
کاشی زاده 11 سال پیش
کد های مربوط به اکشن بار رو در کلاس EnhancedActivity قرار بدید و اکتیوتی ها رو از این کلاس extends کنید .
احسان منصوری 11 سال پیش
آقای کاشی زاده من آموزش اکشن بار شما رو دیدم. بهتر نیست به جای تعریف اینهمه کتابخونه و کدنویسی، مستقیما layout دستی خودمون رو توی layoutهای دیگه include کنیم؟
کاشی زاده 11 سال پیش
میشه از روش های مختلف استفاده کرد ولی بهترین روش به نظر بنده همین روش هست که در اون هیچ لایبری اضافی نشده جز یک لایبری که مربوط به خود اندروید هست .
miladjalali.ir 11 سال پیش
سپاسگذارم،میشه لطف کنید و در مورد EnhancedActivity یکم بیشتر توضیح بدید؟
Hamedmtn 11 سال پیش
بسیار ممنون...موفق باشد دوست عزیز
کاشی زاده 11 سال پیش
استاد در آموزش هاشون توضیحات کامل در رابطه با EnhancedActivity دادند . خلاصش میشه این : یک کلاس اکتیویتی هست همه اکتیوتی ها از اون extends میشن .
miladjalali.ir 11 سال پیش
میشه لطف کنید و بگید که کدوم قسمت از آموزش ها توضیح دادن؟ سپاسگذارم
کاشی زاده 11 سال پیش
خاطرم نیست ، باید همون اویل باشه در ربابطه با G.CurrentActivity ببنید کجا مطلب گفتند .
Sara.gh 11 سال پیش
دوستان من UI برنامم رو به طور کامل طراخی کردم اما اخرش یادم اومد که اکشن بار بسازم.چطور میتونم لایه اکشن بار و بسازم بدون اینکه لایه های دیگ خراب نشن؟
Lion 10 سال پیش
تم برنامه رو چه جوری تو منیفست از Theme.AppCompat بگیرم؟
شیخی 9 سال پیش
سلام و ممنون از آموزش خوبتون. اگر همزمان دو اسلاید بخوام ایجاد کنم که یکی از سمت چپ باز بشه و یکی هم از سمت راست، چه تغییراتی باید ایجاد کنم؟ در فایل root باید هردو رو تعریف کنم؟ اما اسم لایه اصلی فایل روت رو drawerlayout تعریف کردید که داخل فایل main برای اسلاید چپ در نظر گرفتیدش و اگر جدا یه Drawerlayout دیگه بخوام تعریف کنم در کلاس اصلی setContext رو برابر root قرار دادید. ممنون میشم کمکم کنید
شیخی 9 سال پیش
مشکل حل شد. باید gravity لایه سمت راست رو right قرار می دادم

پاسخ‌ها 22

سعید 10 سال پیش

سلام خدمت شما کاشی زاده عزیز

ببخشید من از آموزش اکشن بار و اسلایدینگ منو در سایت خودتون http://learn.kashizadeh.com/

استفاده کردم

ولی هنگامی که برنامه میخواد باز بشه اول بک xml خالی میاد(در حد یک ثانیه) بعدش میره اکشن بار رو نشون میده

میشه بگید مشکل از کجاست و چگونه میتوانم آن را رفع کنم

ممنون

اینم یک عکس گیف لینک عکس

نظرات

کاشی زاده 10 سال پیش
این مورد رو قبلا حل کرده بودم ولی الان خاطرم نیست از چه مسیری رفته بودم باید کد هامو بررسی کنم که ممکنه زمان ببره.
سعید 10 سال پیش
ممنون میشم اگه یکم وقت بذارید آخه من چند روزه درگیرشم سرچ کردم این کارها رو انجام دادم 1-عوض کردن تم appcompat 2- ساخت splash قبل از اکتیویتی شامل اکشن بار و اسلایدینگ
مهدی 10 سال پیش

درود

اگه بخوایم اکشن بار بغیر از اکتیویتی اول توی همه اکتیویتی هامون هم باشه 

چه کدی باید بزنیم ؟

نظرات

کاشی زاده 10 سال پیش
کد های مربوط به اکشن بار رو داخل ActivtyEnhanced میبرید ، در مورد این اکتیویتی استاد توضیحات لازم رو در بخش های ابتدایی آموزش دادند .
ali 10 سال پیش
آقای کاشی زاده اونوقت ActivityEnhanced رو از ActionBarActivity، extends کنیم ؟
ali 10 سال پیش
حل شد!
مهدی 10 سال پیش
dezali@ لطف کن نمونه کدش رو بنویس.
ali 10 سال پیش
من طبق آموزش های آقای کاشی زاده پیش رفتم و هم اکشن بار رو درست کردم و هم اسلایدینگ منو رو و کامل و درست اجرا شد ولی مشکلی دارم که هیچکس هم کمک نکرد و اون همون مشکل شماست که در بالا گفتید در واقع اون موقع که نوشتم حل شد این بود که کد ها رو در ActivityEnhanced گذاشتم و برنامه اجرا شد ولی بعدش دیدم که همون مشکل پا برجاست.
کاشی زاده 10 سال پیش
شما میتونید اکشن بار رو توی ActivityEnhanced قرار بدید تا همه جا استفاده بشه ولی برای Navigation Drawer باید یسری کد اضافه کنید که خودش برای هر اکتیویتی لایه روت رو بسازه و آتیم هارو توش قرار بده و در آخرم لایه منو رو بچسبونه بهش
ali 10 سال پیش
مرسی از جواب دادن آقای کاشی زاده گرامی، ولی واسه منی که تازه کارم اگه در این زمینه لینکی یا فیلمی بود که متوجه بشم و یاد بگیرم چطوری باید این کد را بنویسم خیلی کمک بزرگی بود!
زهرا رئیسی 10 سال پیش
من کد مربوط به اکشن بار را توی ActivityEnhanced کپی کردم و این اکتیویتی را هم اکستندز از actionbaractivity قرار دادم ولی ارور میگیره آقای کاشی زاده ممنون میشم راهنمایی کنید .
cyberchief 10 سال پیش
من یک کلاس activityenhanced درست کردم و کد ها رو تو اون گذاشتم، و بقیه اکتیویتی ها رو از اون اکستندز کردم، حالا همه چی درس کار میکنه، بجز دکمه ای که باید اسلایدینگ منو رو بیاره، کار نمیکنه، هیچ خطایی هم نمیده
oMiD4gApp 9 سال پیش
جناب کاشی زاده..((((این لینک ورژن 7 اگر ورژن 21 رو دانلود کنید میتونید از متریال دیزاین لولیپاپ هم استفاده کنید )))) این لینکی که برای دانلود لایبری داده بودید و رفتم حالا چطور دانلودش کنم ! باید ثبت نام کنم تو سایت یا..؟

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