سبد (0)

ابزار نمایش Gallery و ImageView

ابزار نمایش Gallery و ImageView

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

استفاده از ابزارهای نمایش تصویر

برای نمایش تصاویر و عکس ها از ابزارهای نمایش ImageView, Gallery,ImageSwitcher و GridView استفاده می کنیم.

ابزارهای نمایش Gallery و ImageView

ابزار نمایش Gallery برای نمایش یکسری از آیتم به صورت افقی و با قابلیت پیمایش,استفاده می شود.در شکل زیر نحوه ی نمایش تصاویر توسط گالری را ملاحظه می فرمائید.

در ادامه نحوه ی کار با این ابزار را بررسی میکنیم.

1.با استفاده از اکلیپس یک پروژه ی جدید اندرویدی با نام Gallery ایجاد کنید.

2.فایل main.xml را به صورت زیر ویرایش کنید:

 

<?xml version=”1.0” encoding=”utf-8”?>
<LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
android:orientation=”vertical”
android:layout_width=”fill_parent”
android:layout_height=”fill_parent” >
<TextView
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:text=”Images of San Francisco” />
<Gallery
android:id=”@+id/gallery1”
android:layout_width=”fill_parent”
android:layout_height=”wrap_content” />
<ImageView
android:id=”@+id/image1”
android:layout_width=”320px”
android:layout_height=”250px”
android:scaleType=”fitXY” />
</LinearLayout>

3.روی فولدر res/values کلیک راست کنید و به قسمت NEW و سپس به File بروید و نام فایل را attrs.xml قرار دهید.

4.فایل attrs.xml را به شکل زیر در آورید:

 

<?xml version=”1.0” encoding=”utf-8”?>
<resources>
<declare-styleable name=”Gallery1”>
<attr name=”android:galleryItemBackground” />
</declare-styleable>
</resources>

5.یکسری عکس ها را آماده کرده و آنها را با نام های pic1.png و pic2.png و... تغییر نام دهید.

6.تمامی عکس ها را با موس گرفته و به فولدر res/drawable-mspi بکشید و رها کنید.وقتی پیامی ظاهر شد Copy files را انتخاب کرده و روی Ok کلیک کنید.

نکته:در این مثال ما برنامه را در یک AVD با رزولوشن متوسط تست کردیم.اما در واقعیت باید مطمئن شوید که تصاویر شما برای هر نوع رزولوشن و در فولدر مربوط به آن موجود باشد.

7.فایل MainActivity.java را به صورت زیر تغییر دهید.

 

package com.PRG.Gallery;
import android.app.Activity;
import android.os.Bundle;
import android.content.Context;
import android.content.res.TypedArray;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageView;
import android.widget.Toast;
public class MainActivity extends Activity {
//---the images to display---
Integer[] imageIDs = {
R.drawable.pic1,
R.drawable.pic2,
R.drawable.pic3,
R.drawable.pic4,
R.drawable.pic5,
R.drawable.pic6,
R.drawable.pic7
};
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Gallery gallery = (Gallery) findViewById(R.id.gallery1);
gallery.setAdapter(new ImageAdapter(this));
gallery.setOnItemClickListener(new OnItemClickListener()
{
public void onItemClick(AdapterView<?> parent, View v,
int position, long id)
{
Toast.makeText(getBaseContext(),
“pic” + (position + 1) + “ selected”,
Toast.LENGTH_SHORT).show();
}
});
}
public class ImageAdapter extends BaseAdapter
{
private Context context;
private int itemBackground;
public ImageAdapter(Context c)
{
context = c;
//---setting the style---
TypedArray a = obtainStyledAttributes(R.styleable.Gallery1);
itemBackground = a.getResourceId(
R.styleable.Gallery1_android_galleryItemBackground, 0);
a.recycle();
}
//---returns the number of images---
public int getCount() {
return imageIDs.length;
}
//---returns the ID of an item---
public Object getItem(int position) {
return position;
}
//---returns the ID of an item---
public long getItemId(int position) {
return position;
}
//---returns an ImageView view---
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView = new ImageView(context);
imageView.setImageResource(imageIDs[position]);
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
imageView.setLayoutParams(new Gallery.LayoutParams(150, 120));
imageView.setBackgroundResource(itemBackground);
return imageView;
}
}
}

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

توجه داشته باشید که اگر روی یکی از عکس ها کلیک کنید,به وسیله ی کلاس Toast پیامی نمایش داده می شود.

9.برای نمایش عکس انتخاب شده در ابزار نمایش ImageView,فایل MainActivity.java را به صورت زیر ویرایش کنید:

 

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Gallery gallery = (Gallery) findViewById(R.id.gallery1);
gallery.setAdapter(new ImageAdapter(this));
gallery.setOnItemClickListener(new OnItemClickListener()
{
public void onItemClick(AdapterView<?> parent, View v,
int position, long id)
{
Toast.makeText(getBaseContext(),
“pic” + (position + 1) + “ selected”,
Toast.LENGTH_SHORT).show();
//---display the images selected---
ImageView imageView = (ImageView) findViewById(R.id.image1);
imageView.setImageResource(imageIDs[position]);
}
});
}

10.مجدداً برنامه را در شبیه ساز اجرا کنید.حالا شما میتوانید تصویر انتخاب شده در ImageView را ببینید.

روش کار

ابتدا Gallery و ImageView را به فایل main.xml اضافه کردیم:

 

<Gallery
android:id=”@+id/gallery1”
android:layout_width=”fill_parent”
android:layout_height=”wrap_content” />
<ImageView
android:id=”@+id/image1”
android:layout_width=”320px”
android:layout_height=”250px”
android:scaleType=”fitXY” />

همانطور که قبلاً عنوان شد, گالری برای نمایش یکسری تصویر در حالت افقی مورد استفاده قرار می گیرد.ImageView هم برای نمایش یک عکس استفاده می شود,که در اینجا عکس انتخاب شده توسط کاربر است.

لیستی از تصاویر که باید نمایش داده شوند در آرایه ای با نام imageIDs ذخیره شده است:

 

//---the images to display---
Integer[] imageIDs = {
R.drawable.pic1,
R.drawable.pic2,
R.drawable.pic3,
R.drawable.pic4,
R.drawable.pic5,
R.drawable.pic6,
R.drawable.pic7
};

شما کلاس ImageAdapter را که کلاس BaseAdapter را بسط می دهد را ایجاد کردید که میتواند ابزار Gallery را به یکسری از ابزار های ImageView متصل کند.

 

Gallery gallery = (Gallery) findViewById(R.id.gallery1);
gallery.setAdapter(new ImageAdapter(this));
gallery.setOnItemClickListener(new OnItemClickListener()
{
public void onItemClick(AdapterView<?> parent, View v,
int position, long id)
{
Toast.makeText(getBaseContext(),
“pic” + (position + 1) + “ selected”,
Toast.LENGTH_SHORT).show();
//---display the images selected---
ImageView imageView = (ImageView) findViewById(R.id.image1);
imageView.setImageResource(imageIDs[position]);
}
});

وقتی یک عکس در ابزار نمایش Gallery انتخاب شود,محل عکس انتخاب شده(0 برای عکس اول,1 برای عکس دوم و ...) نمایش داده می شود و همچنین آن عکس نیز در ImageView به نمایش در می آید.

 ImageSwitcher

تا اینجا یاد گرفتیم که چگونه از ابزار نمایش Gallery و ImageView با هم برای نمایش یکسری تصویر و نمایش تصویر انتخاب شده به صورت جداگانه استفاده کنیم.اما گاهی اوقات تمایل ندارید عکسی که کاربر در گالری انتخاب کرده به صورت ناگهانی ظاهر گردد.مثلاً می خواهید یک انیمیشن و یا افکت کوچک در هنگام تغییر عکس اعمال کنید.در این مورد,می بایستی از ابزارهای نمایش ImageView و Gallery تواماً استفاده کنید.برای این کار تمرین زیر را به دقت انجام دهید.

1.با استفاده از اکلیپس یک پروژه جدید با نام ImageSwitcher ایجاد کنید.

2.فایل main.xml را به صورت زیر تغییر دهید:

 

<?xml version=”1.0” encoding=”utf-8”?>
<RelativeLayout xmlns:android=”http://schemas.android.com/apk/res/android”
android:orientation=”vertical”
android:layout_width=”fill_parent”
android:layout_height=”fill_parent”
android:background=”#ff000000” >
<Gallery
android:id=”@+id/gallery1”
android:layout_width=”fill_parent”
android:layout_height=”wrap_content” />
<ImageSwitcher
android:id=”@+id/switcher1”
android:layout_width=”fill_parent”
android:layout_height=”fill_parent”
android:layout_alignParentLeft=”true”
android:layout_alignParentRight=”true”
android:layout_alignParentBottom=”true” />
</RelativeLayout>

3.روی فولدر res/values کلیک راست کرده و به قسمت NEW و سپس File بروید و نام فایل ایجاد شده را attrs.xml بگذارید.

4.فایل attrs.xml را به شکل زیر در آورید:

 

<?xml version=”1.0” encoding=”utf-8”?>
<resources>
<declare-styleable name=”Gallery1”>
<attr name=”android:galleryItemBackground” />
</declare-styleable>
</resources>

5.تعدادی عکس را به فولدر res/drawable-mdpi بکشید و دوباره وقتی پیام ظاهر شد Copy file را انتخاب کرده و روی Ok بزنید.

6.فایل MainActivity.java را به صورت زیر ویرایش کنید:

 

package com.PRG.ImageSwitcher;
import android.app.Activity;
import android.os.Bundle;
import android.content.Context;
import android.content.res.TypedArray;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.view.animation.AnimationUtils;
import android.widget.BaseAdapter;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Gallery;
import android.widget.ViewSwitcher.ViewFactory;
import android.widget.ImageSwitcher;
import android.widget.ImageView;
public class MainActivity extends Activity implements ViewFactory {
//---the images to display---
Integer[] imageIDs = {
R.drawable.pic1,
R.drawable.pic2,
R.drawable.pic3,
R.drawable.pic4,
R.drawable.pic5,
R.drawable.pic6,
R.drawable.pic7
};
private ImageSwitcher imageSwitcher;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
imageSwitcher = (ImageSwitcher) findViewById(R.id.switcher1);
imageSwitcher.setFactory(this);
imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(this,
android.R.anim.fade_in));
imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this,
android.R.anim.fade_out));
Gallery gallery = (Gallery) findViewById(R.id.gallery1);
gallery.setAdapter(new ImageAdapter(this));
gallery.setOnItemClickListener(new OnItemClickListener()
{
public void onItemClick(AdapterView<?> parent,
View v, int position, long id)
{
imageSwitcher.setImageResource(imageIDs[position]);
}
});
}
public View makeView()
{
ImageView imageView = new ImageView(this);
imageView.setBackgroundColor(0xFF000000);
imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
imageView.setLayoutParams(new
ImageSwitcher.LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.FILL_PARENT));
return imageView;
}
public class ImageAdapter extends BaseAdapter
{
private Context context;
private int itemBackground;
public ImageAdapter(Context c)
{
context = c;
//---setting the style---
TypedArray a = obtainStyledAttributes(R.styleable.Gallery1);
itemBackground = a.getResourceId(
R.styleable.Gallery1_android_galleryItemBackground, 0);
a.recycle();
}
//---returns the number of images---
public int getCount()
{
return imageIDs.length;
}
//---returns the ID of an item---
public Object getItem(int position)
{
return position;
}
public long getItemId(int position)
{
return position;
}
//---returns an ImageView view---
public View getView(int position, View convertView, ViewGroup parent)
{
ImageView imageView = new ImageView(context);
imageView.setImageResource(imageIDs[position]);
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
imageView.setLayoutParams(new Gallery.LayoutParams(150, 120));
imageView.setBackgroundResource(itemBackground);
return imageView;
}
}
}

7.برنامه را اجرا کنید.در شکل زیر ابزارهای نمایش Gallery و ImageSwitcher نشان داده می شود که در حال نمایش یکسری از عکس ها و همچنین عکس انتخاب شده است.

روش کار

اولین نکته ی قابل تأمل د راین مثال این است که MainActivity نه تنها Activity را گسترش نمی دهد,بلکه ViewFactory را ایجاد می کند.برای استفاده از ابزار نمایش ImageSwitcher باید اینترفیس ViewFactory را ایجاد نمود که باعث تولید ابزارهای مورد استفاده در ابزار نمایش ImageSwitcher می گردد.بنابراین برای این کار متد ()makeView را ایجاد می کنیم:

 

public View makeView()
{
ImageView imageView = new ImageView(this);
imageView.setBackgroundColor(0xFF000000);
imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
imageView.setLayoutParams(new
ImageSwitcher.LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.FILL_PARENT));
return imageView;
}

این متد یک ابزار نمایش جدید ایجاد می کند که در اینجا یک ImageVIew است و آن را به ImageSwitcher می افزاید.همانند مثال گالری در بخش قبلی,یک کلاس ImageAdapter به همراه چند ابزار نمایش ImageView ایجاد کردیم و سپس آن را به ابزار گالری متصل نمودیم.

در متد ()onCreate به ابزار نمایش ImageSwitcher دسترسی یافته و انیمیشن مورد نظر را تنظیم می کنیم.حال این نوع انیمیشن می تواند به صورت FadeIn و FadeOut باشد.در نهایت وقتی که یکی از تصاویر از گالری انتخاب شد,در ابزار نمایش ImageSwitcher نشان داده می شود:

 

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
imageSwitcher = (ImageSwitcher) findViewById(R.id.switcher1);
imageSwitcher.setFactory(this);
imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(this,
android.R.anim.fade_in));
imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this,
android.R.anim.fade_out));
Gallery gallery = (Gallery) findViewById(R.id.gallery1);
gallery.setAdapter(new ImageAdapter(this));
gallery.setOnItemClickListener(new OnItemClickListener()
{
public void onItemClick(AdapterView<?> parent,
View v, int position, long id)
{
imageSwitcher.setImageResource(imageIDs[position]);
}
});
}

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

 

imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(this,
android.R.anim.slide_in_left));
imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this,
android.R.anim.slide_out_right));

GridView

ابزار نمایش GridView آیتم ها را در دو بعد قابل پیمایش نمایش می دهد.می توان از GridView و ImageView به صورت توأم برای نمایش یکسری تصویر استفاده نمود.

1.با استفاده از اکلیپس یک پروژه ی جدید با نام Grid ایجاد کنید.

2.تعدادی عکس به فولدر res/drawable-mdpi منتقل کنید.وقتی پیامی نمایش داده شد, Copy files  را انتخاب کرده و روی Ok بزنید.

 3.فایل main.xml را به صورت زیر تغییر دهید:

 

<?xml version=”1.0” encoding=”utf-8”?>
<GridView xmlns:android=”http://schemas.android.com/apk/res/android”
android:id=”@+id/gridview”
android:layout_width=”fill_parent”
android:layout_height=”fill_parent”
android:numColumns=”auto_fit”
android:verticalSpacing=”10dp”
android:horizontalSpacing=”10dp”
android:columnWidth=”90dp”
android:stretchMode=”columnWidth”
android:gravity=”center”
/>

 4.فایل MainActivity.java را به صورت زیر اصلاح کنید:

 

package com.PRG.Grid;
import android.app.Activity;
import android.os.Bundle;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.Toast;
public class MainActivity extends Activity {
//---the images to display---
Integer[] imageIDs = {
R.drawable.pic1,
R.drawable.pic2,
R.drawable.pic3,
R.drawable.pic4,
R.drawable.pic5,
R.drawable.pic6,
R.drawable.pic7
};
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
GridView gridView = (GridView) findViewById(R.id.gridview);
gridView.setAdapter(new ImageAdapter(this));
gridView.setOnItemClickListener(new OnItemClickListener()
{
public void onItemClick(AdapterView<?> parent,
View v, int position, long id)
{
Toast.makeText(getBaseContext(),
“pic” + (position + 1) + “ selected”,
Toast.LENGTH_SHORT).show();
}
});
}
public class ImageAdapter extends BaseAdapter
{
private Context context;
public ImageAdapter(Context c)
{
context = c;
}
//---returns the number of images---
public int getCount() {
return imageIDs.length;
}
//---returns the ID of an item---
public Object getItem(int position) {
return position;
}
//---returns the ID of an item---
public long getItemId(int position) {
return position;
}
//---returns an ImageView view---
public View getView(int position, View convertView,
ViewGroup parent)
{
ImageView imageView;
if (convertView == null) {
imageView = new ImageView(context);
imageView.setLayoutParams(new
GridView.LayoutParams(85, 85));
imageView.setScaleType(
ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(5, 5, 5, 5);
} else {
imageView = (ImageView) convertView;
}
imageView.setImageResource(imageIDs[position]);
return imageView;
}
}
}

 5.برنامه را اجرا کنید.در تصویر زیر GridView را در حال نمایش تصویر می بینید.

روش کار

همانند مثال Gallery و ImageSwitcher, کلاس ImageAdapter را ایجاد کرده و به GridView متصل کردیم:

 

GridView gridView = (GridView) findViewById(R.id.gridview);
gridView.setAdapter(new ImageAdapter(this));
gridView.setOnItemClickListener(new OnItemClickListener()
{
public void onItemClick(AdapterView<?> parent,
View v, int position, long id)
{
Toast.makeText(getBaseContext(),
“pic” + (position + 1) + “ selected”,
Toast.LENGTH_SHORT).show();
}
});

//---returns an ImageView view---
public View getView(int position, View convertView,
ViewGroup parent)
{
ImageView imageView;
if (convertView == null) {
imageView = new ImageView(context);
imageView.setLayoutParams(new
GridView.LayoutParams(85, 85));
imageView.setScaleType(
ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(5, 5, 5, 5);
} else {
imageView = (ImageView) convertView;
}
imageView.setImageResource(imageIDs[position]);
return imageView;
}

بکارگیری منو با استفاده از View ها

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

  • Option menu (منوی گزینه ها) -- اطلاعاتی را در مورد برنامه کنونی نمایش می دهد.در اندروید منوی گزینه ها به واسطه ی فشردن کلید MENU نمایش داده می شود.
  • Context menu (منو متن) -- اطلاعاتی را در مورد ابزار نمایش و یا اکتیویتی کنونی نمایش می دهد.

در اندروید برای نمایش منوی متن باید روی گزینه مورد نظر ضربه زده و چند لحظه نگه دارید.شکل زیر یک نمونه از منو گزینه ها را در برنامه مرورگر وب نمایش می دهد.این منو هنگام فشردن کلید Menu توسط کاربر نمایش داده می شود.گزینه های این منو مطابق با اکتیویتی در حال اجرا هستند.

در شکل زیر هم یک منو متن نمایش داده شده که به واسطه ضربه زدن و نگه داشتن روی تصویر,ظاهر شده است.این منو مطابق با ابزار نمایشی است که کاربر با آن تعامل دارد.عموماًبرای فعال سازی و نمایش منوی متن,می بایستی کاربر روی یک ابزار نمایش ضربه زده و نگه دارد.

ایجاد Helper Methods

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

1.با استفاده از اکلیپس یک پروژه ی جدید با نام Menus ایجاد کنید.

2.فایل MainActivity.java را به صورت زیر اصلاح کنید:

 

package com.PRG.Menus;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
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);
}
private void CreateMenu(Menu menu)
{
MenuItem mnu1 = menu.add(0, 0, 0, “Item 1”);
{
mnu1.setAlphabeticShortcut(‘a’);
mnu1.setIcon(R.drawable.icon);
}
MenuItem mnu2 = menu.add(0, 1, 1, “Item 2”);
{
mnu2.setAlphabeticShortcut(‘b’);
mnu2.setIcon(R.drawable.icon);
}
MenuItem mnu3 = menu.add(0, 2, 2, “Item 3”);
{
mnu3.setAlphabeticShortcut(‘c’);
mnu3.setIcon(R.drawable.icon);
}
MenuItem mnu4 = menu.add(0, 3, 3, “Item 4”);
{
mnu4.setAlphabeticShortcut(‘d’);
}
menu.add(0, 3, 3, “Item 5”);
menu.add(0, 3, 3, “Item 6”);
menu.add(0, 3, 3, “Item 7”);
}
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;
case 5:
Toast.makeText(this, “You clicked on Item 6”,
Toast.LENGTH_LONG).show();
return true;
case 6:
Toast.makeText(this, “You clicked on Item 7”,
Toast.LENGTH_LONG).show();
return true;
}
return false;
}
}

روش کار

در مثال بالا دو متد ایجاد کردیم.متد ()CreateMenu و متد ()MenuChoice. متد ()CreateMenu یک آرگومان از نوع Menu می پذیرد و یکسری گزینه به آن اضافه می کند.

برای اضافه کردن گزینه به منو,ابتدا یکسری از کلاس MenuItem ایجاد کرده و سپس با استفاده از متد ()add گزینه های مورد نظر را به آن اضافه می کنیم:

 

MenuItem mnu1 = menu.add(0, 0, 0, “Item 1”);
{
mnu1.setAlphabeticShortcut(‘a’);
mnu1.setIcon(R.drawable.icon);
}

چهار آرگومان متد ()add به صورت زیر هستند:

  • groupId -- مقدار این آرگومان نشان دهنده ی گروهی است که این گزینه به آن تعلق دارد.فعلاً 0 را انتخاب می کنیم.
  • itemId -- یک شناسه ی منحصر به فرد است.
  • Order -- اولویت گزینه را مشخص می کند.
  • Title -- متن عنوان گزینه را مشخص می کند.

می توان از متد ()setAlphabeticShortcut برای اختصاص دادن یک میانبر برای گزینه استفاده نمود تا کاربر بتواند با فشردن آن کلید در صفحه کلید به گزینه مورد نظر دسترسی داشته باشد.متد ()setIcon یک عکس را برای نمایش در گزینه منو تنظیم می کند.

متد ()MenuChoice یک آرگومان از نوع MenuItem دریافت کرده و چک می کند که آیا این گزینه انتخاب شده است یا خیر.سپس بوسیله ی کلاس Toast به کاربر نشان می دهد که کدام گزینه انتخاب شده است.

OptionMenu (منوی گزینه ها)

حالا آماده ی اعمال تغییرات در پروژه برای نمایش منوی گزینه ها د رهنگام فشردن کلید MENU دستگاه اندروید توسط کاربر شده اید.

1. با استفاده از همان پروژه ای که در بخش قبلی ایجاد کردید,فایل  MainActivity.java را به صورت زیر اصلاح کنید:

 

package com.PRG.Menus;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
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);
}
@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)
{
//...
}
private boolean MenuChoice(MenuItem item)
{
//...
}
}

 2.برنامه را اجرا کنید.شکل زیر منو گزینه ها را پس از فشردن کلید MENU توسط کاربر نشان می دهد.برای انتخاب یک گزینه روی آن کلیک کرده و یا کلید میانبر آن (A تا D که چهار کلید اول را شامل می شود) را فشار دهید.

روش کار

 برای نمایش منو گزینه ها در اکتیویتی, باید دو متد را در اکتیویتی ایجاد نمود:

()onCreateOptionMenu و ()onOptionsItemSelected. متد ()onCreateOptionMenu وقتی که دکمه Menu فشرده می شود,فراخوانی میگردد.در این مثال متد کمکی ()CreateMenu را برای نمایش منو گزینه ها فراخوانی کردیم.وقتی که یک گزینه انتخاب گردد, متد ()onOptionsItemSelected فراخوانی می شود.در این مثال از متد کمکی ()MenuChoice برای نمایش گزینه انتخاب شده استفاده کردیم.به این نکته توجه داشته باشید که نمایش منوها در نسخه های مختلف اندروید متفاوت است.در نسخه ی 3 و بعد از آن منوها بدون آیکون نمایش داده می شوند و در نسخه های پایین تر گزینه های بیشتر از 5 عدد درون دکمه قرار می گیرند.

Context Menu

 در قسمت قبل ملاحضه کردید هنگامی که کاربر روی دکمه MENU میزند,منوی گزینه ها نمایش داده می شود.علاوه بر منوی گزینه ها می توانید منوی متن را هم نمایش دهید.یک منوی متن معمولاً به یکی از اجزای صفحه تعلق دارد و هنگامی که کاربر ضربه زده و چند لحظه نگه دارد این منو نمایش داده می شود.مثلاً وقتی کاربر روی یک دکمه نگه دارد,پس از چند لحظه منوی متن مربوط به این ابزار نمایش پدیدار می شود.برای اینکه یک منوی متن را به یک ابزار نمایش متصل کنید, باید متد ()setOnCreateContextMenuListener ابزار نمایش مورد نظر را فراخوانی کنید.در تمرین زیر به شما نشان داده خواهد شد که چگونه یک ابزار نمایش دکمه را به یک منو متن متصل سازید.

1.با استفاده از همان پروژه قبل فایل MainActivity.java را به صورت زیر ویرایش کنید:

 

MainActivity.java file:
package com.PRG.Menus;
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.View;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
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);
Button btn = (Button) findViewById(R.id.btn1);
btn.setOnCreateContextMenuListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
CreateMenu(menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
return MenuChoice(item);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View view,
ContextMenuInfo menuInfo)
{
super.onCreateContextMenu(menu, view, menuInfo);
CreateMenu(menu);
}
@Override
public boolean onContextItemSelected(MenuItem item)
{
return MenuChoice(item);
}
private void CreateMenu(Menu menu)
{
//...
}
private boolean MenuChoice(MenuItem item)
{
//...
}
}

2.برنامه را در شبیه ساز اجرا کنید.شکل زیر منوی متن را وقتی که روی دکمه ضربه زده و نگه دارید نمایش می دهد.

روش کار

در مثال بالا,متد ()setOnCreateContextMenuListener ابزار نمایش Button منوی متن را به آن متصل می سازد.وقتی که کاربر روی دکمه ضربه می زند و نگه می دارد,متد ()onCreateContextMenu فراخوانی می گردد.در این متد شما متد ()CreateMenu را برای نمایش منوی متن فراخوانی کردید.به طور مشابه وقتی که یکی از گزینه ها انتخاب می شود, متد ()onContextItemSelected فراخوانی می گردد و اینجا جایی است که متد ()MenuChoice را برای نمایش پیام فراخوانی می کنید.

توجه داشته باشید که کلیدهای میانبر برای گزینه های منو کار نمی کند.برای فعالسازی کلیدهای میانبر, باید متد ()setQuertyMode شئ Menu را فراخوانی کنید.به صورت زیر:

 

private void CreateMenu(Menu menu)
{
menu.setQwertyMode(true);
MenuItem mnu1 = menu.add(0, 0, 0, “Item 1”);
{
mnu1.setAlphabeticShortcut(‘d’);
mnu1.setIcon(R.drawable.icon);
}
//...
}
تمامی محصولات و خدمات این وبسایت، حسب مورد دارای مجوزهای لازم از مراجع مربوطه می‌باشند و فعالیت‌های این سایت تابع قوانین و مقررات جمهوری اسلامی ایران است.
logo-samandehi مجوز نشر دیجیتال از وزرات فرهنگ و ارشاد اسلامی پرداخت آنلاین -  بانک ملت معرفی بیاموز در شبکه سه