такВот я и спрашиваю так это или не так?
почему же она должна тю-тю? внизу просто вылезит один вспомогательный барчик со своими кнопкамии хочет справку глянуть, а она тю-тю..
такВот я и спрашиваю так это или не так?
почему же она должна тю-тю? внизу просто вылезит один вспомогательный барчик со своими кнопкамии хочет справку глянуть, а она тю-тю..
)))) Я ВООБЩЕ не понял, что ты написала ))))) Напиши по пунктам ))) Вопрос задан по заданию из урока, там для двух вьюшек делается два менюOlivka писал(а):судя по статье с девелопера это два разные совсем вида меню, просто появляются из одного места, поэтому все в разных.
есть момент по п1 если меню одинаковое из парочки активити, то можно сделать так, чтоб это все было в одном месте (обработка нажатий) в классе. И тогда если чтто-то поменяется, то менять в одном месте надо.
задавала этот вопрос на стеке, там его забраковали ))) но смысл был такой - в контекстное надо пихать все пункты, которые могут выполняться при выделении.
А. У меня еще вопросик - у кого андроид есть. Вот gmail, там можно выделить сколько хочешьп исем (например для удаления). Какой там способ есть быстро поснимать все галочки? Вдруг передумал.
Б. И еще не пойму как выглядит и где он - пункт этого меню Done.
Код: Выделить всё
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
switch (v.getId()) {
case R.id.tvColor:
menu.setGroupVisible(2, false);
getMenuInflater().inflate(R.menu.mymenu, menu);
break;
case R.id.tvSize:
menu.setGroupVisible(1, false);
getMenuInflater().inflate(R.menu.mymenu, menu);
break;
}
}
Код: Выделить всё
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android">
<group
android:id="@+id/group1">
<item
android:id="@+id/menu_red"
android:title="red">
</item>
<item
android:id="@+id/menu_green"
android:title="green">
</item>
<item
android:id="@+id/menu_blue"
android:title="blue">
</item>
</group>
<group
android:id="@+id/group2">
<item
android:id="@+id/menu_22"
android:orderInCategory="1"
android:title="22">
</item>
<item
android:id="@+id/menu_26"
android:orderInCategory="2"
android:title="26">
</item>
<item
android:id="@+id/menu_30"
android:orderInCategory="4"
android:title="30">
</item>
</group>
</menu>
Вы группам присвоили @+id/group1 и @+id/group2cadmy писал(а):Пробую создать контекстное меню при помощи xml-файла. Для показа правильного набора опций использую метод setGroupVisible, однако при вызове меню появляются все пункты меню.
Подскажите, пожалуйста, как исправить.
У меня получилось так:asolovey писал(а):Здравствуйте,
Выложите, пожалуйста, кто-то полный код реализации меню через хml, а точнее программную его часть. Что-то никак не могу додуматься.
Спасибо!
Код: Выделить всё
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<group android:id="@+id/group1">
<item android:id="@+id/MENU_COLOR_RED" android:orderInCategory="1" android:title='Red'></item>
<item android:id="@+id/MENU_COLOR_GREEN" android:orderInCategory="2" android:title='Green'></item>
<item android:id="@+id/MENU_COLOR_BLUE" android:orderInCategory="3" android:title='Blue'></item>
</group>
<group android:id="@+id/group2">
<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>
Код: Выделить всё
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
public class Main extends Activity {
TextView tvColor, tvSize;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tvColor = (TextView) findViewById(R.id.tvColor);
tvSize = (TextView) findViewById(R.id.tvSize);
// для tvColor и tvSize необходимо создавать контекстное меню
registerForContextMenu(tvColor);
registerForContextMenu(tvSize);
}
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
switch (v.getId()) {
case R.id.tvColor:
getMenuInflater().inflate(R.menu.mymenucont, menu);
menu.setGroupVisible(R.id.group2, false);
break;
case R.id.tvSize:
getMenuInflater().inflate(R.menu.mymenucont, menu);
menu.setGroupVisible(R.id.group1, false);
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);
}
}
Спасибо. Все работает. Но интересует еще один вопрос: Когда мы создавали обычное меню в уроке 14 с помощью xml, мы просто указали идентификатор 1, а теперь указываем R.id.group1. Объясните, пожалуйста, разницуdamager82 писал(а): Вы группам присвоили @+id/group1 и @+id/group2
А в коде пытаетесь работать с группами 1 и 2. Замените на R.id.group1 и R.id.group2
Код: Выделить всё
// обновление меню
public boolean onPrepareOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
// пункты меню с ID группы = 1 видны, если в CheckBox стоит галка
menu.setGroupVisible(1, chb.isChecked());
return super.onPrepareOptionsMenu(menu);
}
Код: Выделить всё
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
switch (v.getId()) {
case R.id.tvColor:
getMenuInflater().inflate(R.menu.mymenu, menu);
menu.setGroupVisible(R.id.group2, false);
break;
case R.id.tvSize:
getMenuInflater().inflate(R.menu.mymenu, menu);
menu.setGroupVisible(R.id.group1, false);
break;
}
}
скорее всего тема другая, сейчас при создании проекта задается тема (halo light, halo dark - как то так они называются) когда создавался урок такого ещё не былоDangreon писал(а):Подскажите, почему полученная активность в уроке выглядит не так как у меня, а именно у меня белый фон и на ней 2 textview с текстом черного цвета, в уроке же черный фон и тект textview серого цвета ?
да, как по мне, лучше отдельно инфлейтить.insider писал(а):А мне как-то не нравится реализация через setGroupVisible, потому что когда групп будет больше двух, выключать придется каждую в отдельности, и это будет довольно грязно. Красивее уж, по-моему, всегда инфлейтить отдельное меню. Я прав?
Код: Выделить всё
OnCreateContextMenuListener menuLstnr1 = new OnCreateContextMenuListener ()
{
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)
{
getMenuInflater().inflate(R.menu.mymenu1, menu);
}
};
OnCreateContextMenuListener menuLstnr2 = new OnCreateContextMenuListener ()
{
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)
{
getMenuInflater().inflate(R.menu.mymenu2, menu);
}
};