استفاده از appcompat v7 برای ساخت Actionbar
من از appcompat v7 support library و از روشی که در تصویر زیر هم ملاحظه میفرمایید برای اضافه کردن LIBRARY به پروژه و ساخت actionbar استفاده کردم که بعد از رفع چند تا مشکل کوچیک جواب داد ولی سئوالی که دارم برای زمانیه که من فولدر کتابخونه رو میبندم با اینکار یه علامت تعجب قرمز رنگ روی پروژه ظاهر میشه که این خطا رو میده که ساختن workspace با مشکل مواجه شد، که خب منطقیه ولی چون دفعه اولمه ، میخواستم ببینم این خطا طبیعیه یا نه؟ و اینکه همیشه لازمه کتابخونه ای که در پروژه استفاده شده باز باشه ؟

و این هم خطا:

در ضمن اگه دوست دارید از actionbar استفاده کنید این راهنمایی خیلی کمکتون میکنه تمام موارد مربوط به اکشن بار رو با مثال توضیح داده به این سئوال هم سر بزنید
سئوال دومم اینه که اگه بخوام در چند تا اکتیویتی مختلف از اکشن بار استفاده کنم حتمآ باید برای تک تکشون به صورت جداگانه در فولدر menu فایل xml ایجاد کنم و آیتم های اکشن بار رو در اون قرار بدم نمیشه آیتم هایی که در کل اکتیویتی ها مورد نیازه در یه فایل xml تعریف کنیم و در هر اکتیویتی فقط مواردی رو که لازمه نشون بدیم؟ مثلاً Settings,about,help رو در اکتیویتی اصلی و search ,favorite,important رو در یه اکتیویتی دیگه داشته باشیم.
سئوال بعدی هم اینکه من میخوام با استفاده از روشی که در این لینک اومده background اکشن بار رو تغییر بدم ولی هر ترفندی میزنم جواب نمیده :| کسی میدونه مشکل ممکنه از کجا باشه؟
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="CustomActionBarTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar">
<!-- Support library compatibility -->
<item name="actionBarStyle">@style/MyActionBar</item>
</style>
<!-- ActionBar styles -->
<style name="MyActionBar" parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
<!-- Support library compatibility -->
<item name="background">@drawable/actionbar_background</item>
</style>
</resources>
بعد هم به صورت زیر تم رو به اکتیویتی مورد نظر اعمال کردم
<activity android:theme="@style/CustomActionBarTheme"/>
بله ، کاملا منطقی هست ، شما سعی می کنید منابع رو از مسیر مشخص شده بخونید اما پیدا نمیشه ، دقیقا مثل این هست که یک فایل الزامی در پوشه ی پروژه نباشه
من یک اکتیویتی parent ساختم که استاد با عنوان enhanced اکتیویتی آموزش دادند ، بعد اون اکتیویتی اکشن بار داره و در onOptionMenuCreate هم دوباره فایل xml رو set می کنید ، فایل xml رو هم با عنوان public_menu_items.xml ساختم :)
سوال سوم تون رو نمیدونم ! ، یعنی کار نکردم ، اما بهتون این لینک رو پیشنهاد میدم :)
در مورد سوالتون ، و بی پاسخ موندن !
حقیقت اینه من به تاپیک طولانی کمتر بها میدم و فکر میکنم خودتون هم قبول داشته باشید که می شد هر سه سوالتون رو در 3 خط کامل نوشت ، پس شما خودتون هم مقصر هستید ، با این وجود ، من وقتی دیدم پاسخ سوالتون رو میدونم (متوجه شدم مرتبط به اکشن بار هست و تقریبا بهش مسلط ام ) مشترک سوال شدم ، که اگه پاسخ مناسب نگرفت ، پاسخ بدم
از نظر من ، سوال کننده ، 80 درصد در جواب های دریافتی نقش داره :)
این یه نمونه از public item های من ، که در واقع همون enhanced Activity میشه
public class publicBarItems extends ActionBarActivity {
private static MenuItem cmsItem;
private static MenuItem searchItem;
private static SearchView mySearchView;
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.setting:
startActivity(new Intent(G.context, Activitysetting.class));
return true;
case R.id.CMS:
startActivity(new Intent(G.context, ActivityCMS.class));
return true;
case R.id.about:
startActivity(new Intent(G.context, ActivityAbout.class));
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.shared, menu);
cmsItem = menu.findItem(R.id.CMS);
searchItem = menu.findItem(R.id.action_search);
mySearchView = (SearchView) MenuItemCompat.getActionView(searchItem);
mySearchView.setOnQueryTextListener(new OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String text) {
startActivity(new Intent(G.context, ActivitySearchResult.class)
.putExtra("searchText", text)
);
return true;
}
@Override
public boolean onQueryTextChange(String text) {
return true;
}
});
MenuItem item = menu.findItem(R.id.menu_item_share);
ShareActionProvider Provider = (ShareActionProvider) MenuItemCompat.getActionProvider(item);
Provider.setShareHistoryFileName(ShareActionProvider.DEFAULT_SHARE_HISTORY_FILE_NAME);
Provider.setShareIntent(createShareIntent());
return true;
}
private Intent createShareIntent() {
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, "My Test Text");
return shareIntent;
}
public static void hideCatRelated() {
try {
cmsItem.setVisible(false);
searchItem.setVisible(false);
}
catch (Exception e) {
G.logger("nullPointer at public bar items - Hidden");
}
}
public static void showCatRelated() {
try {
cmsItem.setVisible(true);
searchItem.setVisible(true);
}
catch (Exception e) {
G.logger("nullPointer at public bar items - Visible ");
}
}
}
و سایر اکتیویتی ها که میخواین اون ایتم هارو نشون بده حتما باید اینطوری تعریف بشن وگرنه اکشن بار نمایش داده نمیشه !
public class ActivityMain extends publicBarItems {
@Override
public boolean onCreateOptionsMenu(Menu menu) {
return super.onCreateOptionsMenu(menu);
}
}
چیکار کنم که قسمت overflow menu در همه ی دستگاه ها مثل تصویر اول فقط از بالا نمایش داده بشه و مثل تصویر دوم نشه؟
بابت سانسور هم معذرت میخوام اگه میخواید عکس رو ببینید باید با فیل شکن بازش کنید D:

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