در قسمت سی و هشتم آموزش اندروید منو ها را که کاربرد بسیار زیادی در برنامه های اندروید دارد معرفی کرده و انواع آنهارا شرح داده ایم.
منو ها از نماهای پرکاربرد اندروید است و اغلب برای نمایش گزینه ها استفاده میشود اگر دقت کرده باشید ما در اندروید دونوع منو داریم:
مثل همیشه با استفاده از تمرینی نحوه استفاده از منو هارا بهتر درک خواهیم کرد پس پروژه ای بانام دلخواه ایجاد کرده در بخش MainActivity.java دستورات مربوط به نمایش OptionMenu را بدین صورت مینویسیم
package com.example.menuprj; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.widget.Toast; import android.view.*; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); CreateMenu(menu); return true; } private void CreateMenu(Menu menu){ MenuItem mnu1=menu.add(0, 0, 0, "Item 1"); MenuItem mnu2=menu.add(0, 1, 1, "Item 2"); MenuItem mnu3=menu.add(0, 2, 2, "Item 3"); } @Override public boolean onOptionsItemSelected(MenuItem item){ Toast.makeText(getBaseContext(), "You Clciked at Item " + ((item.getItemId())+1), Toast.LENGTH_SHORT).show(); return false; } }
در ابتدا متد onCreateOptionsMenu تعریف شده که هنگام فشرده شدن هرکدام از آیتم های منو فراخوانی میشود و پس از فراخوانی نیز دستورات درون آن اجرا میشود
@Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); CreateMenu(menu); return true; }
که دستور اول با استفاده از کلمه کلیدی super متد()onCreateOption را فراخوانی کرده و یک منو گزینه ای ایجاد میکند.در دستور دوم نیز متد CreateMenu که در ادامه کدنویسی ایجاد کرده ایم را فراخوانی کرده و منو ایجاد شده را به عنوان آرگومان ورودی ارسال میکند.
سپس متد CreateMenu را که شامل چند آیتم است را ایجاد میکنیم
private void CreateMenu(Menu menu){ MenuItem mnu1=menu.add(0, 0, 0, "Item 1"); MenuItem mnu2=menu.add(0, 1, 1, "Item 2"); MenuItem mnu3=menu.add(0, 2, 2, "Item 3"); }
همانگونه که مشاهده میکنید برای تعریف هر آیتم از متد add که ۴آرگومان به شرح زیر دارد استفاده میکنیم
در بخش اخر نیز برای رویداد کلیک هر آیتم دستوری مبنی بر نمایش یک پیغام مناسب نوشته شده
@Override public boolean onOptionsItemSelected(MenuItem item){ Toast.makeText(getBaseContext(), "You Clciked at Item " + ((item.getItemId())+1), Toast.LENGTH_SHORT).show(); return false; }
در پیغام Toast ما با استفاده از ()getItemId ای دی آیتم کلیک شده بدست آمده و +۱ میشود بدین دلیل که ای دی آیتم ها از صفر شروع میشود پس یک واحد به آن اضافه میکنیم تا از ۱ نمایش داده شود.
پس از اجرا نتیجه را نیز بدین صورت خواهید دید
حال برای نمایش یک ContextMenu تنها کافی است تغییرات جزئی را در پروژه قبل ایجاد کنیم پس شروع میکنیم
ابتدا یک ابزار Button درون activity_main.xml ایجاد میکنیم(خیلی راحت به صورت گرافیکی Button را درون صفحه خود قرار دهید)
<Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="154dp" android:text="Button" />
حال درون MainActivity.java خطوط Bold شده زیر را اضافه میکنیم
package com.example.menuprj; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.widget.Button; import android.widget.Toast; import android.view.*; import android.view.ContextMenu.ContextMenuInfo; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button btn=(Button)findViewById(R.id.button1); btn.setOnCreateContextMenuListener(this); } @Override public void onCreateContextMenu(ContextMenu menu,View view, ContextMenuInfo menuinfo) { super.onCreateContextMenu(menu, view ,menuinfo); CreateMenu(menu); } private void CreateMenu(Menu menu){ MenuItem mnu1=menu.add(0, 0, 0, "Item 1"); MenuItem mnu2=menu.add(0, 1, 1, "Item 2"); MenuItem mnu3=menu.add(0, 2, 2, "Item 3"); } @Override public boolean onContextItemSelected(MenuItem item){ Toast.makeText(getBaseContext(), "You Clciked at Item " + ((item.getItemId())+1), Toast.LENGTH_SHORT).show(); return false; } }
اکثر بخش های کدنویسی مانند تمرین OptionMenu میباشد و تغییرات شامل تعریف Button با استفاده از ای دی و فراخوانی کردن متد setOnCreateContextMenuListener مربوط به Button (این متد این قابلیت را به ما میدهد تا با کلیک کردن و نگه داشتن Button منو فعال شود)
Button btn=(Button)findViewById(R.id.button1); btn.setOnCreateContextMenuListener(this);
و تغییر بعدی نیز ایجاد متد onCreateContextMenu است که برای ایجاد منو و آیتم هایش استفاده میشود و بقیه کدنویسی نیز مانند تمرین OptionMenu باقی می ماند.
برنامه را اجرا کرده و نتیجه را بدین صورت مشاهده کنید