آموزش اندروید استودیوآموزش های برنامه نویسی اندروید
آموزش برنامه نویسی اندروید با اندروید استودیو (بخش پنجاه و سوم: Context Menu )
در این بخش از برنامه نویسی اندروید، می خواهیم با ContextMenu ها آشنا شده و نحوه کار کردن با آن ها را آموزش دهیم.
ContextMenu در سیستم عامل ویندوز و … هم وجود دارد. بدین صورت که وقتی بر روی فایلی کلیک می کنید، می توانید با کلیک راست بر روی آن کارهایی که می توانید بر روی فایل انجام دهید را ببینید.
ولی در اندروید این کار با استفاده از نگه داشتن طولانی مدت (Hold) بر روی فایل انجام می شود.
در بخش سی ام، با لیست ویو ها و نحوه کار با آن ها آشنا شدیم.
در این بخش، با استفاده از Context Menu می خواهیم ، عملیاتی را بر روی لیست ویو (ListView) ها انجام دهیم.
مثلا این که بتوانیم نام مخاطبینی را در لیست ویو قرار بدهیم، و عملیاتی نظیر تماس و ارسال پیام را برای این لیست ویو انجام دهیم.
پس کاری که در این بخش نیز انجام می دهیم اینست که با نگه داشتن طولانی بر روی نام یکی از افرادی که در لیست ویو تعریف می کنیم، بتوانیم عملیات تماس و ارسال پیام را برای وی مشاهده نماییم.
من یک پروژه در اندروید استودیو ایجاد می کنم و نامش را ContextMenu-Gsm می گذارم.
ابتدا به سراغ Layout برنامه می رویم و یک لیست ویو را به لایه اپلیکیشن، اضافه می کنیم.
کد لیست ویو من :
<ListView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/listview" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_marginTop="23dp" />
خط “android:id=”@+id/listview را به صورت دستی اضافه نمودم.
در قسمت بعدی باید در MainActivity.java ، کدهای جاوای لازم را برای لیست ویو بنویسیم.
همچنین Context Menu نیز در این بخش توضیح داده می شود.
در متد ()onCreate لیست ویو را تعریف کرده و با استفاده از آداپتر ، مقدارهایی که با استفاده از آرایه رشته ای به آن دادیم، را به لیست ویو اضافه می کنیم.
ListView listView; String myContacts[]={"Iliya","kurosh","Arya","Mehrdad","Behnam"}; listView=(ListView)findViewById(R.id.listview); ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,myContacts); listView.setAdapter(adapter);
تمام مراحل بالا در بخش سی ام توضیح داده شد. ولی یک کد در انتهای متد ()onCreate به این بخش اضافه شده است.
این کد عبارت است از :
registerForContextMenu(listView);
در این کد که listView ما به صورت آرگومان ورودی آن ، قرار گرفته است، ما لیست ویویی که نوشتیم را برای عملیات Context Menu که بعدا تعریف میکنیم آماده می کنیم.
در خارج از متد ()onCreate یک متد به نام onCreateContextMenu تعریف کرده و در آن کدهایی می نویسیم تا در هنگامی که Context Menu باز شود، مقادیری که می خواهیم به ما نشان داده شود.
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); menu.setHeaderTitle("انتخاب عملیات"); menu.add(0, v.getId(), 0, "تماس"); menu.add(0, v.getId(), 0, "پیامک"); }
مثلا در کد بالا ، Context Menu ما، عنوانی به نام “انتخاب عملیات” دارد.
همچنین دو عملیات “تماس” و “پیامک” را نیز برای Context Menu در این بخش تعریف می کنیم.
در مرحله بعد متدی از نوع boolean به نام onContextItemSelected تعریف می کنیم تا وقتی بر روی عملیات مربوطه مثلا تماس کلیک کردیم، کارهایی که می خواهیم را برای ما انجام دهید.
public boolean onContextItemSelected(MenuItem item){ if(item.getTitle()=="تماس"){ Toast.makeText(getApplicationContext(),"You Can Define Calling Code Later",Toast.LENGTH_LONG).show(); } else if(item.getTitle()=="پیامک"){ Toast.makeText(getApplicationContext(),"You Can Define Sending Sms Code Later",Toast.LENGTH_LONG).show(); }else{ return false; } return true; }
همان طور که در کد بالا مشاهده می کنید، با استفاده از دستورات کنترلی If ، عملیاتی که می خواهیم را نوشته ایم.
مثلا اگر در کد بالا بر روی تماس کلیک شود، با استفاده از کد زیر عملیات مربوط به تماس ، انجام می شود که در اینجا با استفاده از Toast این موضوع به اطلاع کاربر می رسد.
if(item.getTitle()=="تماس")
کد MainActivity.java
package com.gsm_developers.contextmenu_gsm; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.ContextMenu; import android.view.MenuItem; import android.view.View; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Toast; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ListView listView; String myContacts[]={"Iliya","kurosh","Arya","Mehrdad","Behnam"}; listView=(ListView)findViewById(R.id.listview); ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,myContacts); listView.setAdapter(adapter); registerForContextMenu(listView); } public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); menu.setHeaderTitle("انتخاب عملیات"); menu.add(0, v.getId(), 0, "تماس"); menu.add(0, v.getId(), 0, "پیامک"); } public boolean onContextItemSelected(MenuItem item){ if(item.getTitle()=="تماس"){ Toast.makeText(getApplicationContext(),"You Can Define Calling Code Later",Toast.LENGTH_LONG).show(); } else if(item.getTitle()=="پیامک"){ Toast.makeText(getApplicationContext(),"You Can Define Sending Sms Code Later",Toast.LENGTH_LONG).show(); }else{ return false; } return true; } }
خیلی ممنون
فقظ یه سوال: چه جوری میشه که برای هر مخاطب یک شماره خاص در زمانی که آیتم call انتخاب میشه در نظر گرفت؟
سلام، ی سوال مثلا من دوتا دکمه دارم تو ی صفحه واسه هر دوشم context menu میخوام استفاده کنم ولی آیتماشون یکی نیست مثلا اگه آیتم واسه دکمه اول one , two. هست واسه دومی آیتم منوش three , four باشه میشه؟
سلام بله امکان پذیر هست