در قسمت بیست و پنجم آموزش اندروید در رابطه با نوار اکشن و نحوه سفارشی کردن آن با یک پروژه صحبت کرده ایم.
علاوه بر فرگمنت ها ویژگی دیگری که در اندروید ۳ و ۴ از آن رونمایی شد Action bar یا نوار اکشن است.در گذشته نوار اکشن در بالای صفحه نمایش دیده می شد حال نوار اکشن که حاوی آیکون برنامه و عنوان اکتیویتی است جای آن را گرفته.همچنین به صورت دلخواه میتوان از action item یا گزینه های اکشن نیز در این نوار استفاده نمود.
برای درک بیشتر پروژه جدیدی به نام ActionBarPrj ایجاد کرده و بدون هیچ تغییری آن را اجرا میکنیم و نتیجه زیر را مشاهده خواهیم کرد
همانگونه که مشاهده میکنید نوار اکشن در بالای صفحه نمایش داده شده حال میخواهیم آن را پنهان کنیم. برای این کار دو راه وجود دارد یکی اینکه در فایل manifest برنامه چنین کدنویسی کنیم
android:theme="@android:style/Theme.Holo.NoActionBar"
ودیگری اینکه در کلاس جاوا برنامه چنین کدنویسی کنیم
import android.os.Bundle; import android.app.ActionBar; import android.app.Activity; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ActionBar ab= getActionBar(); ab.hide(); //ab.show(); //--show it again } }
حال با اجرای برنامه خواهید دید که نوار اکشن دیده نمیشود و همانطور که در کدنویسی ها مشخص شده با اجرای دستور ab.show() میتوان دوباره نوار اکشن را دید.پس ازا جرا نتیجه رامیتوان بدین صورت مشاهده کرد
خصوصیت android:theme این قابلیت را به شما میدهد تا با مقداردهی @android:style/Theme.Holo.NoActionBar نوار اکشن را پنهان کنید و راه دیگر نیز استفاده از متد ()getActionBar برای رجوع به نوار اکشن است سپس برای پنهان کردن متد ()hide و آشکار کردن متد ()show را فراخوانی میکنیم.
به این نکته باید دقت کرد که اگر از خصوصیت android:Theme برای عدم نمایش استفاده کردید به کار بردن متد ()getActionBar مقدار null برمیگرداند از این رو بهتر است همیشه از متد ()getActionBar استفاده کرد.
علاوه بر نمایش نام و آیکون برنامه درسمت چپ نوار اکشن میتوان گزینه هایی را نیز در کنار این نام قرار داد. این گزینه هارا Action Item گویند.این گزینه ها معمولا برای عملیات پرکاربرد در برنامه مورد استفاده قرار میگیرد برای مثال برای عملیات حذف و اضافه و…
برای درک بیشتر به تمرین زیر دقت فرمایید.پروژه تمرین قبل در فایل MainActivity.java چنین کدنویسی میکنیم
package com.example.actionbarprj; import android.app.ActionBar; import android.app.Activity; import android.content.Intent; 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.activity_main); //actionBar.setDisplayShowHomeEnabled(true); //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; } }
پس از اجرای برنامه میتوان نتیجه را به شکل زیر مشاهده کرد
همانگونه که در تصویر فوق مشاهده میکنید با کلیک کردن هرکدام از آیکونها یک پیغام Toast مبنی بر آیکون کلیک شده مشاهده خواهید کرد.
گزینه های اکشن در نوار اکشن به واسطه فراخوانی متد ()onCreateOptionMenu در محل خود قرار میگیرند
@Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); CreateMenu(menu); return true; }
در مثال بالا از متد ()CreateMenu برای نمایش گزینه های منو استفاده میشود:
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 استفاده میکنیم این کار به دستگاه میفهماند که میتوان از این گزینه به عنوان یک گزینه اکشن استفاده کرد.
زمانی که یک گزینه منو توسط کاربر کلیک میشود متد ()onOptionsItemSelected فراخوانی میگردد
@Override public boolean onOptionsItemSelected(MenuItem item) { return MenuChoice(item); }
در اینجا از متد ()MenuChoice که خودمان نوشته ایم برای مشخص کردن آیتمی که انتخاب شده استفاده میکنیم تا بتوان پیغام مناسب را نمایش داد.
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; {
مقادیر دیگری که میتوان از آن برای نوع اکشن آیتم ها استفاده کرد به صورت زیر است
SHOW_AS_ACTION_ALWAYS : همیشه به صورت یک Button در نوار اکشن نمایش داده میشود.
SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW : عملیات اکشن این آیتم به صورت collapse فرو میریزد.
SHOW_AS_ACTION_NEVER : این آیتم را هیچگاه به صورت یک دکمه نمایش نمیدهد.
SHOW_AS_ACTION_WITH_TEXT : آیتم را به همراه Caption آن نمایش میدهد.