Урок 15. Контекстное меню

Обсуждение уроков
Аватара пользователя
dens
Сообщения: 47
Зарегистрирован: 03 фев 2013, 00:14

Re: Урок 15. Контекстное меню

Сообщение dens » 11 фев 2013, 01:55

Да, конечно можно. Это работает со всеми обработчиками.

anthyef
Сообщения: 5
Зарегистрирован: 10 фев 2013, 14:09

Re: Урок 15. Контекстное меню

Сообщение anthyef » 11 фев 2013, 13:48

И ещё подскажите пожалуйста. Работает ли функция android:onClick="onSomeMenuClick" для контекстного меню, или придётся использовать onContextItemSelected() ?

anthyef
Сообщения: 5
Зарегистрирован: 10 фев 2013, 14:09

Re: Урок 15. Контекстное меню

Сообщение anthyef » 11 фев 2013, 13:53

dens писал(а):Да, конечно можно. Это работает со всеми обработчиками.
а какой тип должен иметь обработчик ??
OnContextItemSelectedListener подчеркивается, но импортировать ничего не предлагает

aleksbim
Сообщения: 81
Зарегистрирован: 02 фев 2013, 02:52

Re: Урок 15. Контекстное меню

Сообщение aleksbim » 15 мар 2013, 02:17

Подскажите, пожалйуста! Почему у Вас выскакивает автоматическая заглушка, как например здесь:
ContextMenuInfo menuInfo) {
// TODO Auto-generated method stub
а у меня, при нажатии ctrl+пробел, - нет?

Аватара пользователя
dens
Сообщения: 47
Зарегистрирован: 03 фев 2013, 00:14

Re: Урок 15. Контекстное меню

Сообщение dens » 17 мар 2013, 13:19

anthyef писал(а):
dens писал(а):Да, конечно можно. Это работает со всеми обработчиками.
а какой тип должен иметь обработчик ??
OnContextItemSelectedListener подчеркивается, но импортировать ничего не предлагает
Кажется, я наврал. Этот метод (как я понял) принадлежит (вызывается) не View, а Activity, поэтому, нужно определять его только в классе, а посетать обработчик в onCreate, похоже, не получится.

BaRRagA
Сообщения: 1
Зарегистрирован: 25 янв 2013, 16:52

Re: Урок 15. Контекстное меню

Сообщение BaRRagA » 21 мар 2013, 12:45

День добрый!
В этом уроке при упражнении сделать всё меню в xml, споткнулся на switch (item.getItemId()) и дальнейшему обращению к id нажатого пункта меню, помог форум. И собственно вопрос - почему бы не сделать отдельный урок по отладке приложений? Перспектива дебага, переменные и всё такое.. Думаю, новичкам было б очень полезно(типа меня :) ).

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 15. Контекстное меню

Сообщение Foenix » 21 мар 2013, 15:43

BaRRagA писал(а):День добрый!
В этом уроке при упражнении сделать всё меню в xml, споткнулся на switch (item.getItemId()) и дальнейшему обращению к id нажатого пункта меню, помог форум. И собственно вопрос - почему бы не сделать отдельный урок по отладке приложений? Перспектива дебага, переменные и всё такое.. Думаю, новичкам было б очень полезно(типа меня :) ).
уроки это своего рода старт, на основании их можно начать понимать книги.. можно не дожидаясь урока почитать про это в какой-нибуь книжке
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

RAMONTA
Сообщения: 1
Зарегистрирован: 29 мар 2013, 22:41

Re: Урок 15. Контекстное меню

Сообщение RAMONTA » 29 мар 2013, 22:59

Здравствуйте. Можно ли сделать так, чтобы контекстное меню было видно изначально, не нажимая никаких кнопок?

MAXLIFE
Сообщения: 1
Зарегистрирован: 11 июн 2013, 12:34

Re: Урок 15. Контекстное меню

Сообщение MAXLIFE » 11 июн 2013, 12:42

Я решил не замарачиваться с группировками пунктов меню при работе с XML. Просто создал 2 отдельных меню: mymenu.xml и mymenu2.xml. Хелп помог разобраться с синтаксисом (всё пашет!) Вот что я написал в MainActivity.java:

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
switch (v.getId()) {
case R.id.tvColor:
inflater.inflate(R.menu.mymenu, menu);
break;
case R.id.tvSize:
inflater.inflate(R.menu.mymenu2, menu);
break;
}
}


@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
// пункты меню для tvColor
case R.id.MENU_COLOR_RED:
tvColor.setTextColor(Color.RED);
tvColor.setText("Text color = red");
break;
case R.id.MENU_COLOR_GREEN:
tvColor.setTextColor(Color.GREEN);
tvColor.setText("Text color = green");
break;
case R.id.MENU_COLOR_BLUE:
tvColor.setTextColor(Color.BLUE);
tvColor.setText("Text color = blue");
break;
// пункты меню для tvSize
case R.id.MENU_SIZE_22:
tvSize.setTextSize(22);
tvSize.setText("Text size = 22");
break;
case R.id.MENU_SIZE_26:
tvSize.setTextSize(26);
tvSize.setText("Text size = 26");
break;
case R.id.MENU_SIZE_30:
tvSize.setTextSize(30);
tvSize.setText("Text size = 30");
break;
}
return super.onContextItemSelected(item);
}

razmus
Сообщения: 82
Зарегистрирован: 26 мар 2013, 10:47

Re: Урок 15. Контекстное меню

Сообщение razmus » 23 июн 2013, 23:27

Скажите, а можно ли ручками изменить цвет контекстного меню, к примеру фон с белого на зеленый.
Как то так... menu.setBackgroundColor(Green); или через xml файл?

З.Ы.
Меню вида
menu.add(0, 1, 0, "Add");

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 15. Контекстное меню

Сообщение rezak90 » 23 июн 2013, 23:35

razmus писал(а):Скажите, а можно ли ручками изменить цвет контекстного меню, к примеру фон с белого на зеленый.
Как то так... menu.setBackgroundColor(Green); или через xml файл?

З.Ы.
Меню вида
menu.add(0, 1, 0, "Add");
http://stackoverflow.com/questions/4604 ... in-android
R.id.team
Политика на форуме запрещена

dender
Сообщения: 3
Зарегистрирован: 11 сен 2013, 20:01

Re: Урок 15. Контекстное меню

Сообщение dender » 11 сен 2013, 20:05

Возникла проблема с контекстным меню. Все делаю, как описано выше, но контекстное меню не срабатывает, при на нажатии на textview. В чем может быть проблема?

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 15. Контекстное меню

Сообщение Foenix » 11 сен 2013, 21:22

если программируете для андроида выше 3.0, то забудьте уже про него, данный компонент не рекомендуется для использования разработчиками.
When developing for Android 3.0 and higher, you should instead use the contextual action mode to enable actions on selected content. This mode displays action items that affect the selected content in a bar at the top of the screen and allows the user to select multiple items.
http://developer.android.com/guide/topics/ui/menus.html
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

dender
Сообщения: 3
Зарегистрирован: 11 сен 2013, 20:01

Re: Урок 15. Контекстное меню

Сообщение dender » 11 сен 2013, 21:32

Спасибо! Правда я создавал проект под 2.3 версию(


dender
Сообщения: 3
Зарегистрирован: 11 сен 2013, 20:01

Re: Урок 15. Контекстное меню

Сообщение dender » 11 сен 2013, 22:27

Если быть точныйм то 2.3.3. Как было в самом уроке.

snowkam
Сообщения: 162
Зарегистрирован: 21 мар 2013, 11:22

Re: Урок 15. Контекстное меню

Сообщение snowkam » 29 окт 2013, 10:55

Добрый день. Подскажите как можно вызвать контекстное меню коротким нажатием через onClick
Вопрос закрыт openContextMenu(v);

seeyoul8r
Сообщения: 5
Зарегистрирован: 25 окт 2013, 20:05

Re: Урок 15. Контекстное меню

Сообщение seeyoul8r » 31 окт 2013, 14:01

Добрый день!

В конце урока говорится о том, чтобы мы попробовали сделать контекстное меню, реализуя его через хмл-файл. Я решил не делать 2 хмл файла, чтобы в каждом записать 2 группы меню для каждого текствью, а сделал все в одном, разбив их на группы внутри файла. Потом вызывал их из метода onCreateContextMenu, используя метод setGroupVisible. В итоге в каждом текствью выдается полный набор пунктов (шесть) + ни один из них не работает.

Вот код

Код: Выделить всё

package com.example.p0151_contextmenu;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends Activity {

	final int MENU_COLOR_RED = 1;
	final int MENU_COLOR_GREEN = 2;
	final int MENU_COLOR_BLUE = 3;
	final int MENU_SIZE_22 = 4;
	final int MENU_SIZE_26 = 5;
	final int MENU_SIZE_30 = 6;
	TextView tvColor, tvSize;
	
	
	
	@Override
		public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		tvColor = (TextView) findViewById(R.id.tvColor);
		tvSize = (TextView) findViewById(R.id.tvSize);
	// для tvColor и tvSize необходимо создавать контекстное меню
	
		registerForContextMenu(tvColor);
		registerForContextMenu(tvSize);
	}

	private void setGroupVisible(int group0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
	// TODO Auto-generated method stub
	switch (v.getId()) {
	case R.id.tvColor:
		getMenuInflater().inflate(R.menu.mymenu, menu);
		setGroupVisible(R.id.group0);
	break;
	case R.id.tvSize:
		getMenuInflater().inflate(R.menu.mymenu, menu);
		setGroupVisible(R.id.group1);
	break;
	}
	}
	



	@Override
	public boolean onContextItemSelected(MenuItem item) {
	// TODO Auto-generated method stub
	switch (item.getItemId()) {
	// пункты меню для tvColor
	case MENU_COLOR_RED:
	tvColor.setTextColor(Color.RED);
	tvColor.setText("Text color = red");
	break;
	case MENU_COLOR_GREEN:
	tvColor.setTextColor(Color.GREEN);
	tvColor.setText("Text color = green");
	break;
	case MENU_COLOR_BLUE:
	tvColor.setTextColor(Color.BLUE);
	tvColor.setText("Text color = blue");
	break;
	// пункты меню для tvSize
	case MENU_SIZE_22:
	tvSize.setTextSize(22);
	tvSize.setText("Text size = 22");
	break;
	case MENU_SIZE_26:
	tvSize.setTextSize(26);
	tvSize.setText("Text size = 26");
	break;
	case MENU_SIZE_30:
	tvSize.setTextSize(30);
	tvSize.setText("Text size = 30");
	break;
	}
	return super.onContextItemSelected(item);
	}


}



Вот хмл-файл.

Код: Выделить всё

<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android">
<group
android:id="@+id/group0">
<item
android:id="@+id/MENU_COLOR_RED"
android:orderInCategory="3"
android:title="RED">
</item>
<item
android:id="@+id/MENU_COLOR_GREEN"
android:orderInCategory="3"
android:title="GREEN">
</item>
<item
android:id="@+id/MENU_COLOR_BLUE"
android:orderInCategory="3"
android:title="BLUE">
</item>
</group>
<group
android:id="@+id/group1">
<item
android:id="@+id/MENU_SIZE_22"
android:orderInCategory="1"
android:title="22">
</item>
<item
android:id="@+id/MENU_SIZE_26"
android:orderInCategory="2"
android:title="26">
</item>
<item
android:id="@+id/MENU_SIZE_30"
android:orderInCategory="3"
android:title="30">
</item>
</group>
</menu>
Извиняюсь заранее за дурацкий вопрос.

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Урок 15. Контекстное меню

Сообщение KamiSempai » 31 окт 2013, 15:36

Во первых menu.setGroupVisible(R.id.group0, true)...
Во вторых, вы забываете сделать вторую группу невидимой.
Ну и в третих, у вас android:id="@+id/MENU_COLOR_RED". Это значит, что создастся ресурс с Id r.id.MENU_COLOR_RED, а в коде вы используете свои константы, которые к тем что в xml не имеют ни какого отношения. Удалите все константы MENU_<название>, а вместо них используйте r.id.MENU_<название>.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

seeyoul8r
Сообщения: 5
Зарегистрирован: 25 окт 2013, 20:05

Re: Урок 15. Контекстное меню

Сообщение seeyoul8r » 31 окт 2013, 19:11

Благодарю, все заработало.

Код: Выделить всё

  public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { 
    // TODO Auto-generated method stub 
    switch (v.getId()) { 
    case R.id.tvColor: 
        getMenuInflater().inflate(R.menu.mymenu, menu); 
        menu.setGroupVisible(R.id.group1, false); 
    break; 
    case R.id.tvSize: 
        getMenuInflater().inflate(R.menu.mymenu, menu); 
        menu.setGroupVisible(R.id.group0, false); 
    break; 
    } 
    }
Возник еще вопрос, скорее всего я пропустил это в первых уроках. Почему при работе с одними переменными/константами мы используем R.id.x, а при работе с другими - нет. Как в этом примере

Код: Выделить всё

 case R.id.MENU_COLOR_RED: 
    tvColor.setTextColor(Color.RED); 
    tvColor.setText("Text color = red"); 
Ведь и menu_color_red, и tvColor описываются в файле r.java в одной группе. Зачем мы присваиваем константам значения от одного до шести?

Ответить