Re: Урок 15. Контекстное меню
Добавлено: 18 июл 2014, 00:06
Народ кто нибудь ответит мне?
Добро пожаловать на форум сайта
http://forum.startandroid.ru/
Почему нет смысла? разве у каждого View элемента не может быть свое контекстное меню? тогда как мне это реализовать?Foenix писал(а):смысла нет это делать, ты пойми. Почитай гайдлайны гугла, ты хочешь с десктопного поведения, где была правая клавиша мыши и контекстное меню - перетащить это в андроид. Это не верно. Нужно делать единообразные по функционалу приложения, чтобы пользователь знал чего от него ожидать и как им пользоваться без инструкций.
я же сказала - у гугла посмотриbetirsolt писал(а):тогда как мне это реализовать?
это все из урока про контекстное менюMikhail_dev писал(а): Не совсем понял вопроса. Вроде же в коде есть условие выбора элемента. Хотя может быть нерабочее, я уже давно не работал с этим меню. В принципе завтра смогу глянуть, если чуть поподробнее проблему опишут.
Код: Выделить всё
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.Menu;
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
protected 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);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
getMenuInflater().inflate(R.menu.mymenu, menu);
}
@Override
public boolean onContextItemSelected(MenuItem item){
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);
}
}
Код: Выделить всё
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<TextView
android:id="@+id/tvColor"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="50dp"
android:layout_marginTop="50dp"
android:text="Text Color"
android:textSize="26sp" />
<TextView
android:id="@+id/tvSize"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Text Size"
android:textSize="22sp" />
</LinearLayout>
Код: Выделить всё
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<group android:id="@+id/ColorGroup">
<item
android:id="@+id/MENU_COLOR_GREEN"
android:title="Green"/>
<item
android:id="@+id/MENU_COLOR_RED"
android:title="Red"/>
<item
android:id="@+id/MENU_COLOR_BLUE"
android:title="Blue"/>
</group>
<group android:id="@+id/SizeGroup">
<item
android:id="@+id/MENU_SIZE_22"
android:title="22"/>
<item
android:id="@+id/MENU_SIZE_26"
android:title="26"/>
<item
android:id="@+id/MENU_SIZE_30"
android:title="30"/>
</group>
</menu>
Вы не реализовали метод onCreateContextMenu.в данном случае у меня при длительном нажатии на обоих TextView показывается полное меню из 6 пунктов, а мне нужно чтоб при нажатии на TextView tvColor показывались пункты меню отвечающие за цвет, т.е только 3 пункта из моего меню, и для tvSize точно так же, и еще при нажатии на пункты меню не меняется ничего, цвет текста, размер и сам текст, надеюсь так понятно?
вот же у меня есть этот методDonart писал(а):
Вы не реализовали метод onCreateContextMenu.
Код: Выделить всё
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
getMenuInflater().inflate(R.menu.mymenu, menu);
}
Вы его просто пропустили, смотрите урок там все есть. Имею ввиду пропустили реализацию из урокаа как его еще реализовать? что дописать?
по уроку делается не так, по уроку я сделал и все работает, просто автор порекомендовал в конце урока сделать эти меню через файл menu.xml самостоятельно, вот я и пытаюсьDonart писал(а):Вы его просто пропустили, смотрите урок там все есть. Имею ввиду пропустили реализацию из урокаа как его еще реализовать? что дописать?
Код: Выделить всё
tvColor.setTextColor(Color.GREEN);
tvColor.setText("Text color = green");
Код: Выделить всё
//опишем создание контекстных меню
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
switch (v.getId()) {
//менюшка для первой textview
case R.id.ball1_1:
menu.add(0, 1, 0, "1 балл");
menu.add(0, 2, 0, "2 балла");
menu.add(0, 3, 0, "3 балла");
break;
case R.id.ball1_2:
//менюшка для второй textview, абсолютно идентичное
menu.add(0, 4, 0, "1 балл");
menu.add(0, 5, 0, "2 балла");
menu.add(0, 6, 0, "3 балла");
break;
}
}
//обработчик нажатия пунктов меню
@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
// пункты меню для 1 textview
case 1:
numball1_1=1;
tvball1_1.setText(Integer.toString(numball1_1));
break;
case 2:
numball1_1=2;
tvball1_1.setText(Integer.toString(numball1_1));
break;
case 3:
numball1_1=3;
tvball1_1.setText(Integer.toString(numball1_1));
break;
// пункты меню для 2 textview
case 4:
numball1_2=1;
tvball1_2.setText(Integer.toString(numball1_2));
break;
case 5:
numball1_2=2;
tvball1_2.setText(Integer.toString(numball1_2));
break;
case 6:
numball1_2=3;
tvball1_2.setText(Integer.toString(numball1_2));
break;
}
tvitog1.setText(Integer.toString(numball1_1+numball1_2));
return super.onContextItemSelected(item);
}
Код: Выделить всё
public class Day extends ListFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
DayAdapter myListAdapter = new DayAdapter(getActivity(), R.layout.text_fragment, names);
setListAdapter(myListAdapter);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView =inflater.inflate(R.layout.listview, container, false);
ListView lv = (ListView)rootView.findViewById(android.R.id.list);
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
registerForContextMenu(view);
}
public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {
menu.setHeaderTitle("Hello");
menu.setHeaderIcon(R.drawable.up);
menu.add(0, 0, 0, "Item One");
menu.add(0, 1, 0, "Item Two");
}
});
return rootView;
}
}