به کار  گیری ACTION BAR

به کار گیری ACTION BAR

بسم الله الرحمن الرحیم

به کار  گیری ACTION BAR

فصل سوم-بخش دوم

درکنار Fragment ها  یک ویژگی جدی در اندروید 3 و     4     ActionBar    هامی باشند.   در روش سنتی  در بالای صفحه    عنوان برنامه قرار می گرفت.

Action Bar  عنوان برنامه  همراه با ایکن نمایش  می دهند. به طور معمولی  در سمت راست ایتم های  Action Bar     قرار دارند .

در  شکل  زیر  برنامه Email  که در سیستم عامل اندروید  وجود   دارد را مشاهده  می کنیدکه عنوان برنامه  همراه با  Icon  و,    ایتم های ActionBar   رانمایش میدهد

Action Bar در اندروید

بسم الله الرحمن الرحیم

به کار  گیری ACTION BAR

فصل سوم-بخش دوم

درکنار Fragment ها  یک ویژگی جدی در اندروید 3 و     4     ActionBar    هامی باشند.   در روش سنتی  در بالای صفحه    عنوان برنامه قرار می گرفت.

Action Bar  عنوان برنامه  همراه با ایکن نمایش  می دهند. به طور معمولی  در سمت راست ایتم های  Action Bar     قرار دارند .

در  شکل  زیر  برنامه Email  که در سیستم عامل اندروید  وجود   دارد را مشاهده  می کنیدکه عنوان برنامه  همراه با  Icon  و,    ایتم های ActionBar   رانمایش میدهد

Action Bar در اندروید

در قسمت زیر به شما  نمایش  میدهیم که چگونه به صورت برنامه  نویسی ActionBar نمایش  و  مخفی  کنید.

 پروژه جدیدی را به نام MyActionBar ایجاد کنید.

کلیدF11 را فشار  دهید تا برنامه  اجرا  شود.  همان  طورکه مشاهده می کنید

ActionBar برنامه همراه  با نام MyActionBar  و ایکن در بالای صفحه همرا به عنوان نمایش  داده شده  است.

Action Bar در اندروید

برای مخفی کردن   Title برنامه فایل AndroidManifest.xml به صورت زیر تغییر دهید

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.MehrdadJavidi.myactionbar"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="14" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:label="@string/app_name"
android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<android:theme="@android:style/Theme.Holo.NoActionBar" >
</intent-filter>
</activity>
</application>
</manifest>

برنامه را  اجرا کنید.

Action Bar در اندروید

شما می  توانیدActionBar به صورت  برنامه  نویسی با  کلاسActionBar   حذف کنید.

برای  این کار  قدم اول  این  می باشد  که شما باید صفت android:theme  را در قسمت قبلی  حذف کنید. اگر این  کار  را انجام  ندهید برنامه با  خطا روبرو  می شود.

دستورات زیر را به فایل  MainActivity.java اضافه کنید


package com.MehrdadJavidi.myactionbar;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.app.ActionBar;
public class MainActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ActionBar actionBar = getActionBar();
actionBar.hide();
/**actionBar.show();*/ /**---show it again---
}
}

برنامه را اجراکنید  و نتیجه را  مشاهده  کنید.

توضیحات

صفت android:theme  شما  قادر می سازد تا ActionBarرا مخفی کنید.تنظیم این صفت به

“@android:style/Theme.Holo.NoActionBar” باعث می شود ActionBarمخفی شود.و  در  زمان اجرا شما می توانیدgetActionBar()با متد به آن اشاره کنیدو سپس متد   hide() رافراخوانی کنید که باعث مخفی شدن آن می شود. شما بافراخوانی متد show()می توانید آن رانمایش دهید.

 نکته مهم اینجا است که اگر شما  ACtionBarراباصفت android:theme مخفی  کنید و سپس متدgetActionBar() در زمان اجرا فراخوانی کنید مقدار null بر می گرداند.بهتر است که ActionBarرابا در زماناجراباکلاسActionBarمخفی ویا نمایش دهید.

اضافه کردن  آیتم های Actionبه ActionBar

در کنار نمایش عنوان  برنامه   و آیکن برنامه   در  ActionBar شما می  توانید  آیتم های اضافی  دیگری  را  نمایش  دهید.

این آیتم های  اضافی  را   action itenms    می  گویند.

Action  item ها  یک shortcut  از  کار های  رایج  در بر نامه کاربردی   شما  می باشد.به عنوان مثال شما  ممکن یک برنامه  RSS Reader  بنویسید .که بعضی  از  Action Barها می تواندRefresh feed,” “Delete feed” and “Add new feed.” باشند.

در زیر به  شما  نشان میدهیم که چگونه میتوانید action Bar  را اضافه کنید

 

به پروژه قبلی  رفتی     MyActionBar دستورات  زیر  را  به فایلMainActivity.java  اضافه کنید


package com.MehrdadJavidi.myactionbar;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
public class MainActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
/**ActionBar actionBar = getActionBar();*/
/**actionBar.hide();*/
/**actionBar.show();*/ /**---show it again---*/
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
CreateMenu(menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
return MenuChoice(item);
}
private void CreateMenu(Menu menu)
{
MenuItem mnu1 = menu.add(0, 0, 0, "Item 1");
{
mnu1.setIcon(R.drawable.ic_launcher);
mnu1.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
}
MenuItem mnu2 = menu.add(0, 1, 1, "Item 2");
{
mnu2.setIcon(R.drawable.ic_launcher);
mnu2.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
}
MenuItem mnu3 = menu.add(0, 2, 2, "Item 3");
{
mnu3.setIcon(R.drawable.ic_launcher);
mnu3.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
}
MenuItem mnu4 = menu.add(0, 3, 3, "Item 4");
{
mnu4.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
}
MenuItem mnu5 = menu.add(0, 4, 4, "Item 5");
{
mnu5.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
}
}
private boolean MenuChoice(MenuItem item)
{
switch (item.getItemId()) {
case 0:
Toast.makeText(this, "You clicked on Item 1",
Toast.LENGTH_LONG).show();
return true;
case 1:
Toast.makeText(this, "You clicked on Item 2",
Toast.LENGTH_LONG).show();
return true;
case 2:
Toast.makeText(this, "You clicked on Item 3",
Toast.LENGTH_LONG).show();
return true;
case 3:
Toast.makeText(this, "You clicked on Item 4",
Toast.LENGTH_LONG).show();
return true;
case 4:
Toast.makeText(this, "You clicked on Item 5",
Toast.LENGTH_LONG).show();
return true;
}
return false;
}
}

کلید F11 رافشار دهید تا  برنامه اجرا شود.

شما می توانید ایکنهای را در شمت راستActonBar  مشاهیده کنید.

Action Bar در اندروید

شما با  کلید بر روی  دکمهMenu  در Emulatorمنورا مشاهدهکنید.

Action Bar در اندروید

که  این مورد overfl ow menu  شناخته می شود  در بر خی  از  وسیله  های  که د ارای  دکمه  Menu  نمی بشاد  بقیه  منو با  یک ایکن با  علامت  arrow.  نمایش  داده   می شود شکل  زیر  Asus Eee Pad Transformer (Android 3.2.1).  را نمایش   می دهد با کلید بر رویover Flow Meu بقیه  منو  نمایش  داده  می شود.

Action Bar در اندروید

با کلیک  بر روی  منو  با عت می شود  کلاسToast  متن  منوی کلیک  شده  را   بر روی  صفحه  نمایش  دهد.

با فشار دادن  ctr+F11     orientation مربوط به صفحه  را  به  حال    تغییرlandscape دهید   شما حالا  می  توانید   4 عنصر  Action Items  ها  را  مشاهده کنید.

Action Bar در اندروید

توضیحات

برای ایجادaction itemها  شما باید متد onCreateOptionsMenu() مربوط به مربوط به activity را   فراخوانی  کنید

@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
CreateMenu(menu);
return true;
}}

در کد بالا متد CreateMenu را فرواخوانی کرده ایم که  آیتم های  منو را  نمایش  می دهید


private void CreateMenu(Menu menu) private void CreateMenu(Menu menu)
{
MenuItem mnu1 = menu.add(0, 0, 0, "Item 1");
{
mnu1.setIcon(R.drawable.ic_launcher);
mnu1.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
}
MenuItem mnu2 = menu.add(0, 1, 1, "Item 2");
{
mnu2.setIcon(R.drawable.ic_launcher);
mnu2.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
}
MenuItem mnu3 = menu.add(0, 2, 2, "Item 3");
{
mnu3.setIcon(R.drawable.ic_launcher);
mnu3.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
}
MenuItem mnu4 = menu.add(0, 3, 3, "Item 4");
{
mnu4.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
}
MenuItem mnu5 = menu.add(0, 4, 4, "Item 5");
{
mnu5.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
}
}

برای اینکه  منو ها  به صورت  اکشن  بار  نمایش  داده شود  شما باید  متد setShowAsAction()  همرا ه با ثابت SHOW_AS_ACTION_IF_ROOM  فراخوانی کنید . این  دستور  به  دستگاه اندروید  می  گوید اگر  در  action bar فضا وجود  داشتد آنها  را رادر آن فضا نمایش  بدهبد.

وقتی  یک   منو  توسط  کاربر   انتخاب  می شود   متد onOptionsItemSelected()  فراخوانی  می شود

@Override
public boolean onOptionsItemSelected(MenuItem item)
{
return MenuChoice(item);
}

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

 و  نام ایتم انتخاب شده را نمایش  می هد

private boolean MenuChoice(MenuItem item)
{
switch (item.getItemId()) {
case 0:
Toast.makeText(this, "You clicked on Item 1",
Toast.LENGTH_LONG).show();
return true;
case 1:
Toast.makeText(this, "You clicked on Item 2",
Toast.LENGTH_LONG).show();
return true;
case 2:
Toast.makeText(this, "You clicked on Item 3",
Toast.LENGTH_LONG).show();
return true;
case 3:
Toast.makeText(this, "You clicked on Item 4",
Toast.LENGTH_LONG).show();
return true;
case 4:
Toast.makeText(this, "You clicked on Item 5",
Toast.LENGTH_LONG).show();
return true;
}
return false;
}

شخصی سازی  کردن(Customizing) action Itemها  و ایکن مربوط به برنامه

در  مثال قبل  شما   menu itemها  بدون متن نمایش  داده می شدند

اگر  شما بخواهید  یک  متن  همراه  ایکن نمایش داده  شود  شام باید ثابت MenuItem.SHOW_AS_ACTION_WITH_TEXT   را   با  علامت  |   به  متد setShowAsAction(   ارسال کنید

MenuItem mnu1 = menu.add(0, 0, 0,"Item 1");
{
mnu1.setIcon(R.drawable.ic_launcher);
mnu1.setShowAsAction(
MenuItem.SHOW_AS_ACTION_IF_ROOM |
MenuItem.SHOW_AS_ACTION_WITH_TEXT);
}

شخصی سازی Action Bar

برنامه   دارای    ایکن می باشد    زمانی  که بر روی  آن  کلیک  می  کنیم  روی داد  onOptionsItemSelected()  مانند  ایتم های  action bar   اجرا می  شود برای  اینکه  تشخیص  دهیم  که    ایکن برنامه   انتخاب شده  یا  ایتم های  action abr    باید  از ثابت 

 استفاده android.R.id.home  کنید 



private boolean MenuChoice(MenuItem item)
{
switch (item.getItemId()) {
case android.R.id.home:
Toast.makeText(this,
"You clicked on the Application icon",
Toast.LENGTH_LONG).show();
return true;
case 0:
Toast.makeText(this, "You clicked on Item 1",
Toast.LENGTH_LONG).show();
return true;
case 1:
Toast.makeText(this, "You clicked on Item 2",
Toast.LENGTH_LONG).show();
return true;
case 2:
Toast.makeText(this, "You clicked on Item 3",
Toast.LENGTH_LONG).show();
return true;
case 3:
Toast.makeText(this, "You clicked on Item 4",
Toast.LENGTH_LONG).show();
return true;
case 4:
Toast.makeText(this, "You clicked on Item 5",
Toast.LENGTH_LONG).show();
return true;
}
return false;
}

برای  اینکه شما امکان  کلیک  کردن بر  روی  آیکن برنامه  را  بد هید باید   متد setDisplayHomeAsUpEnabled()   را   فرواخوانی  کنید 

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
/**ActionBar actionBar = getActionBar();*/
/**actionBar.hide();*/
/**actionBar.show();*/ /**---show it again---*/
}

آیکن برنامه  اغلب به کار گرفته می شود  و زمانیهای  استفاده  می شود که شما  می  خواهید به Activity  اصلی  برنامه  باز گردید. به  عنوان مثال  برنامه  شما چند activity    دارد شما  می توانید  از ایکن برنامه  یک  shortcut  به  activity   اصلی  برنامه داشنه باشید. برای  این کار و به  عنوان  یک  تمرین  خوب   شما  می توانید   شی   intent  را  با فلگ FLAG_ACTIVITY_CLEAR_TOP تنظیم  کنید.

switch (item.getItemId()) {
case android.R.id.home:
Toast.makeText(this,
"You clicked on the Application icon",
Toast.LENGTH_LONG).show();
Intent i = new Intent(this, MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);

فلگ Intent.FLAG_ACTIVITY_CLEAR_TOP  به  شما  اطمینان  می دهد مجموع   activity   های  که در back stack   قرار  دارند   زمانی که کاربر بر روی  ایکن برنامه کلیک کردحذف شوند.

این  روش باعث  می شود  زمانی  که  کاربر  دکمه  back  را  زد دیگر  activity  ها نمایش  داه نشود.

نظرات

  • Hannah Martinez
    عبداله
    دو شنبه 11 دی 1278 - 0:00

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

    @Override public void onBackPressed() { Intent in = new Intent(getApplicationContext(), Main.class); in.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(in); finish(); }

    در ظاهر تا زمانی که صفحه نمایش لاک نشده و تبلت در حال کار هست این کد درسته اما گاهی زمانی که چند بار از برنامه خارج نمیشیم و تبلت به حالت استندبای میره می بینیم که با زدن کلیک بک به اکتیویتی اصلی بر نمی گردیم و اکتیویتی های قبلی به ترتیب هیستوری ظاهر می شن فکر می کنید علت چیست.

    با تشکر از شما

  • Hannah Martinez
    عبداله
    دو شنبه 11 دی 1278 - 0:00

    با سلام مجدد گفتم یک موقع وقت برای سوال قبلی م نگذارید... همین الان متوجه اشتباهم شدم متشکرم

    • Judith Bell
      پاسخ
      سیناحسینی
      دو شنبه 11 دی 1278 - 0:00

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

نظرات یا سوالات خودرا با ما درمیان بگذارید

0912 097 5516 :شماره تماس
0713 625 1757 :شماره تماس