Урок 15. Контекстное меню
Re: Урок 15. Контекстное меню
Да, конечно можно. Это работает со всеми обработчиками.
Re: Урок 15. Контекстное меню
И ещё подскажите пожалуйста. Работает ли функция android:onClick="onSomeMenuClick" для контекстного меню, или придётся использовать onContextItemSelected() ?
Re: Урок 15. Контекстное меню
а какой тип должен иметь обработчик ??dens писал(а):Да, конечно можно. Это работает со всеми обработчиками.
OnContextItemSelectedListener подчеркивается, но импортировать ничего не предлагает
Re: Урок 15. Контекстное меню
Подскажите, пожалйуста! Почему у Вас выскакивает автоматическая заглушка, как например здесь:
ContextMenuInfo menuInfo) {
// TODO Auto-generated method stub
а у меня, при нажатии ctrl+пробел, - нет?
ContextMenuInfo menuInfo) {
// TODO Auto-generated method stub
а у меня, при нажатии ctrl+пробел, - нет?
Re: Урок 15. Контекстное меню
Кажется, я наврал. Этот метод (как я понял) принадлежит (вызывается) не View, а Activity, поэтому, нужно определять его только в классе, а посетать обработчик в onCreate, похоже, не получится.anthyef писал(а):а какой тип должен иметь обработчик ??dens писал(а):Да, конечно можно. Это работает со всеми обработчиками.
OnContextItemSelectedListener подчеркивается, но импортировать ничего не предлагает
Re: Урок 15. Контекстное меню
День добрый!
В этом уроке при упражнении сделать всё меню в xml, споткнулся на switch (item.getItemId()) и дальнейшему обращению к id нажатого пункта меню, помог форум. И собственно вопрос - почему бы не сделать отдельный урок по отладке приложений? Перспектива дебага, переменные и всё такое.. Думаю, новичкам было б очень полезно(типа меня ).
В этом уроке при упражнении сделать всё меню в xml, споткнулся на switch (item.getItemId()) и дальнейшему обращению к id нажатого пункта меню, помог форум. И собственно вопрос - почему бы не сделать отдельный урок по отладке приложений? Перспектива дебага, переменные и всё такое.. Думаю, новичкам было б очень полезно(типа меня ).
Re: Урок 15. Контекстное меню
уроки это своего рода старт, на основании их можно начать понимать книги.. можно не дожидаясь урока почитать про это в какой-нибуь книжке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
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 15. Контекстное меню
Здравствуйте. Можно ли сделать так, чтобы контекстное меню было видно изначально, не нажимая никаких кнопок?
Re: Урок 15. Контекстное меню
Я решил не замарачиваться с группировками пунктов меню при работе с 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);
}
@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);
}
Re: Урок 15. Контекстное меню
Скажите, а можно ли ручками изменить цвет контекстного меню, к примеру фон с белого на зеленый.
Как то так... menu.setBackgroundColor(Green); или через xml файл?
З.Ы.
Меню вида
menu.add(0, 1, 0, "Add");
Как то так... menu.setBackgroundColor(Green); или через xml файл?
З.Ы.
Меню вида
menu.add(0, 1, 0, "Add");
Re: Урок 15. Контекстное меню
http://stackoverflow.com/questions/4604 ... in-androidrazmus писал(а):Скажите, а можно ли ручками изменить цвет контекстного меню, к примеру фон с белого на зеленый.
Как то так... menu.setBackgroundColor(Green); или через xml файл?
З.Ы.
Меню вида
menu.add(0, 1, 0, "Add");
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 15. Контекстное меню
Возникла проблема с контекстным меню. Все делаю, как описано выше, но контекстное меню не срабатывает, при на нажатии на textview. В чем может быть проблема?
Re: Урок 15. Контекстное меню
если программируете для андроида выше 3.0, то забудьте уже про него, данный компонент не рекомендуется для использования разработчиками.
http://developer.android.com/guide/topics/ui/menus.htmlWhen 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.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 15. Контекстное меню
Спасибо! Правда я создавал проект под 2.3 версию(
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Урок 15. Контекстное меню
Может всё же от 2.3. версии?
Re: Урок 15. Контекстное меню
Если быть точныйм то 2.3.3. Как было в самом уроке.
Re: Урок 15. Контекстное меню
Добрый день. Подскажите как можно вызвать контекстное меню коротким нажатием через onClick
Вопрос закрыт openContextMenu(v);
Вопрос закрыт openContextMenu(v);
Re: Урок 15. Контекстное меню
Добрый день!
В конце урока говорится о том, чтобы мы попробовали сделать контекстное меню, реализуя его через хмл-файл. Я решил не делать 2 хмл файла, чтобы в каждом записать 2 группы меню для каждого текствью, а сделал все в одном, разбив их на группы внутри файла. Потом вызывал их из метода onCreateContextMenu, используя метод setGroupVisible. В итоге в каждом текствью выдается полный набор пунктов (шесть) + ни один из них не работает.
Вот код
Вот хмл-файл.
Извиняюсь заранее за дурацкий вопрос.
В конце урока говорится о том, чтобы мы попробовали сделать контекстное меню, реализуя его через хмл-файл. Я решил не делать 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. Контекстное меню
Во первых menu.setGroupVisible(R.id.group0, true)...
Во вторых, вы забываете сделать вторую группу невидимой.
Ну и в третих, у вас android:id="@+id/MENU_COLOR_RED". Это значит, что создастся ресурс с Id r.id.MENU_COLOR_RED, а в коде вы используете свои константы, которые к тем что в xml не имеют ни какого отношения. Удалите все константы MENU_<название>, а вместо них используйте r.id.MENU_<название>.
Во вторых, вы забываете сделать вторую группу невидимой.
Ну и в третих, у вас android:id="@+id/MENU_COLOR_RED". Это значит, что создастся ресурс с Id r.id.MENU_COLOR_RED, а в коде вы используете свои константы, которые к тем что в xml не имеют ни какого отношения. Удалите все константы MENU_<название>, а вместо них используйте r.id.MENU_<название>.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Урок 15. Контекстное меню
Благодарю, все заработало.
Возник еще вопрос, скорее всего я пропустил это в первых уроках. Почему при работе с одними переменными/константами мы используем R.id.x, а при работе с другими - нет. Как в этом примере
Ведь и menu_color_red, и tvColor описываются в файле r.java в одной группе. Зачем мы присваиваем константам значения от одного до шести?
Код: Выделить всё
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;
}
}
Код: Выделить всё
case R.id.MENU_COLOR_RED:
tvColor.setTextColor(Color.RED);
tvColor.setText("Text color = red");