Контекстне меню і підменю

Крім стандартного меню Android (Урок №8використовується контекстне меню, яке викликається при натисканні на об'єкт протягом двох-трьох секунд (подія long-press). Також на деяких моделях пристроїв контекстне меню можна викликати при натисканні трекбола або середньої кнопки маніпулятора D-pad. На відміну від звичайного меню, в контекстному меню не підтримуються значки і швидкі клавіші. Друга важлива відмінність - контекстне меню застосовується до виду, а меню до активності. Тому в програмі може бути одне меню і кілька контекстних, наприклад, у кожного елемента TextView.

Програмне створення контекстного меню

Для створення контекстного меню використовується метод зворотного виклику onCreateContextMenu(). У даний метод можна додавати пункти меню за допомогою метода add(). За допомоги методу onContextItemSelected() можна обробляти вибір пункту. Але спочатку треба зареєструвати контекстне меню для потрібного об'єкта, наприклад, для TextView за допомоги методу registerForContextMenu().

public static final int IDM_OPEN = 101; 
public static final int IDM_SAVE = 102; 

final TextView textview = (TextView)findViewById(R. id.textView);
registerForContextMenu(textview); 

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
menu.add(Menu.NONE, IDM_OPEN, Menu.NONE, "Відкрити");
menu.add(Menu.NONE, IDM_SAVE, Menu.NONE, "Зберегти");
}

Якщо запустити проект, то вже зараз можна побачити контекстне меню, яке поки не буде реагувати на вибрані пункти меню. Допишемо код.

 

 

 

 

 

 

 

 

 

@Override
public boolean onContextItemSelected(MenuItem item) {
CharSequence message;
switch (item.getItemId()) {
case IDM_OPEN:
message = "вибрати пункт Відкрити";
break;
case IDM_SAVE:
message = "вибрати пункт Зберегти";
break;
default:
return super.onContextItemSelected(item);
}
Toast toast = Toast.makeText(this, message, Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
return true;
}

 

 

 

 

 

 

 

 

 

Контекстне меню через ресурси

Якщо вам потрібно створити локалізований продукт, то програмне додавання пунктів контекстного меню не підійде. У таких випадках використовується традиційний спосіб через файл ресурсів, рекомендований Google.

Створимо файл XML меню, а також додамо на форму ще один TextView:

<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/change_color"
android:title="@string/titleChangeColor" />
<item android:id="@+id/change_textsize"
android:title="@string/titleChangeTextSize" />
</menu>

registerForContextMenu(textview2);

@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R. menu.context_menu, menu);
}

@Override
public boolean onContextItemSelected(MenuItem item) {
CharSequence message;
switch (item.getItemId()) {
case R. id.change_color:
message = "Міняємо колір";
textview2.setBackgroundColor(Color.RED);
break;
case R. id.change_textsize:message = "Змінюємо розмір шрифту";
textview2.setTextSize(18);
break;
default:
return super.onContextItemSelected(item);
}
Toast toast = Toast.makeText(this, message, Toast.LENGTH_SHORT);
 toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
return true;
}

Ми використовуємо схожий код, як і при створенні стандартного меню. В результаті отримаємо контекстне меню, створене з ресурсів. При виборі потрібного пункту зміниться або колір, або розмір шрифту в TextView.

 

 

 

 

 

 

 

 

 

Вікторія Пряжнікова


2016-06-04 • Просмотров [ 40 ]