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

Обсуждение уроков
Ligo
Сообщения: 2
Зарегистрирован: 26 сен 2015, 15:26

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

Сообщение Ligo » 26 сен 2015, 15:33

Айрат_К писал(а):Всем привет))) Есть урок 15 сделанный через XML код?) Ни как не могу разобраться) Благодарю за внимание)
У меня получилось так:

context_menu.xml

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

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

<group android:id="@+id/groupColor">
    <item
        android:id="@+id/color_red"
        android:title="red">
    </item>

    <item
        android:id="@+id/color_green"
        android:title="green">
    </item>

    <item
        android:id="@+id/color_blue"
        android:title="blue">
    </item>
</group>

<group android:id="@+id/groupSize">
    <item
        android:id="@+id/size_22"
        android:title="size 22">
    </item>
    <item
        android:id="@+id/size_26"
        android:title="size 26">
    </item>
    <item
        android:id="@+id/size_30"
        android:title="size 30">
    </item>
    </group>
</menu>
main_activity

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

package com.objem.p0152contextmenuxml;

import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    TextView textColor, textSize;

 public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textColor = (TextView) findViewById(R.id.myColor);
        textSize = (TextView) findViewById(R.id.mySize);

        registerForContextMenu(textColor);
        registerForContextMenu(textSize);
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v,
                                    ContextMenu.ContextMenuInfo menuInfo) {

        switch (v.getId()) {

            case R.id.myColor:
                getMenuInflater().inflate(R.menu.context_menu, menu);
                menu.setGroupVisible(R.id.groupSize, false);
                break;

            case R.id.mySize:
                getMenuInflater().inflate(R.menu.context_menu, menu);
                menu.setGroupVisible(R.id.groupColor, false);
                break;

        }
    }

    @Override
    public boolean onContextItemSelected(MenuItem item) {
        AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
        switch (item.getItemId()) {
            case R.id.color_red:
                textColor.setTextColor(Color.RED);
                textColor.setText("Text color = red");
                break;
            case R.id.color_green:
                textColor.setTextColor(Color.GREEN);
                textColor.setText("Text color = green");
                break;
            case R.id.color_blue:
                textColor.setTextColor(Color.BLUE);
                textColor.setText("Text color = blue");
                break;
            case R.id.size_22:
                textSize.setTextSize(22);
                textSize.setText("Text size = 22");
                break;
            case R.id.size_26:
                textSize.setTextSize(26);
                textSize.setText("Text size = 26");
                break;
            case R.id.size_30:
                textSize.setTextSize(30);
                textSize.setText("Text size = 30");
                break;
        }
        return super.onContextItemSelected(item);
    }
}

wavaw
Сообщения: 2
Зарегистрирован: 03 сен 2015, 02:17

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

Сообщение wavaw » 29 сен 2015, 23:09

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

public boolean onContextSelected(MenuItem item, int idtxV) {
...
return super.onOptionsItemSelected(item);
}

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

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

Сообщение doter.ua » 29 сен 2015, 23:44

wavaw писал(а):в уроке сказано, что создания контекстного меню можно сделать свой обработчик.
а подскажите, можно ли сделать свой обработчик нажатий на пункты меню по типу:

public boolean onContextSelected(MenuItem item, int idtxV) {
...
return super.onOptionsItemSelected(item);
}
В андроид студии бланк активити сразу с примером он клик меню. А в новой версии еще и снэкбар с плавающим батоном.
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

wavaw
Сообщения: 2
Зарегистрирован: 03 сен 2015, 02:17

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

Сообщение wavaw » 30 сен 2015, 07:31

doter.ua писал(а):
wavaw писал(а):в уроке сказано, что создания контекстного меню можно сделать свой обработчик.
а подскажите, можно ли сделать свой обработчик нажатий на пункты меню по типу:

public boolean onContextSelected(MenuItem item, int idtxV) {
...
return super.onOptionsItemSelected(item);
}
В андроид студии бланк активити сразу с примером он клик меню. А в новой версии еще и снэкбар с плавающим батоном.
этот, автоматически созданный, метод меня не устраивает. создается переопределение вида:

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

Override
    //public boolean onContextItemSelected(MenuItem item)
с только одним входным параметром - item. я же пытаюсь дать на вход item и int

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

public boolean onContextSelected(MenuItem item, int idtxV)
и никак не пойму, где можно прописать, чтоб использовался именно мой метод (а по логам приложение его "не видит").

или может на другое решение направите: мне необходимо на textView "повесить" контекстное меню и потом, в зависимости от выбранного пункта, менять текст этого textView. задача осложняется тем, что textView динамически создается и он может создаваться не один (как пользователь захочет). я поставил присвоение id

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

txD.setId(i++);
но в контекстное меню это id передать не могу

alkoolike
Сообщения: 1
Зарегистрирован: 12 окт 2015, 20:39

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

Сообщение alkoolike » 14 окт 2015, 01:17

Ребят! Доброго времени суток, возник такой вопрос... при написании контекстного меню через xml-способ по какой-то причине не обрабатывается нажатие кнопок с цветами и шрифтами. Буду рад, если кто-нибудь укажет на ошибку.
Файлы описания меню
mymenu:

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

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/MENU_COLOR_RED"
        android:title="RED">
    </item>
    <item
        android:id="@+id/MENU_COLOR_GREEN"
        android:title="Green">
    </item>
    <item
        android:id="@+id/MENU_COLOR_BLUE"
        android:title="Blue">
    </item>
</menu>
mymenu2:

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

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/MENU_SIZE_22"
        android:title="22">
    </item>
    <item
        android:id="@+id/MENU_SIZE_26"
        android:title="26">
    </item>
    <item
        android:id="@+id/MENU_SIZE_30"
        android:title="30">
    </item>
</menu>
MainActivity:

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

package ru.startandroid.p0152contextmenu;

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

public class MainActivity extends Activity {

    TextView tvColor, tvSize;

    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;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tvColor = (TextView) findViewById(R.id.tvColor);
        tvSize = (TextView) findViewById(R.id.tvSize);

        registerForContextMenu(tvColor);
        registerForContextMenu(tvSize);

    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v,
                                    ContextMenu.ContextMenuInfo menuInfo) {
        // TODO Auto-generated method stub
        switch (v.getId()) {
            case R.id.tvColor:
                getMenuInflater().inflate(R.menu.mymenu, menu);
                break;
            case R.id.tvSize:
                getMenuInflater().inflate(R.menu.mymenu2, menu);
                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);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}
и layout-файл activity_main.xml:

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

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <TextView
        android:layout_height="wrap_content"
        android:textSize="26sp"
        android:layout_width="wrap_content"
        android:id="@+id/tvColor"
        android:layout_marginBottom="50dp"
        android:layout_marginTop="50dp"
        android:text="Text color">
    </TextView>
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textSize="22sp"
        android:id="@+id/tvSize"
        android:text="Text size">
    </TextView>
</LinearLayout>

ghostDPUA
Сообщения: 2
Зарегистрирован: 02 ноя 2015, 23:02

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

Сообщение ghostDPUA » 07 ноя 2015, 20:50

А как сделать чтобы все активити имели меню при нажатие кнопки<MENU> ?

Requiem
Сообщения: 2
Зарегистрирован: 24 янв 2016, 12:34

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

Сообщение Requiem » 30 янв 2016, 13:37

alkoolike писал(а):Ребят! Доброго времени суток, возник такой вопрос... при написании контекстного меню через xml-способ по какой-то причине не обрабатывается нажатие кнопок с цветами и шрифтами. Буду рад, если кто-нибудь укажет на ошибку.
Файлы описания меню
mymenu:

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

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/MENU_COLOR_RED"
        android:title="RED">
    </item>
    <item
        android:id="@+id/MENU_COLOR_GREEN"
        android:title="Green">
    </item>
    <item
        android:id="@+id/MENU_COLOR_BLUE"
        android:title="Blue">
    </item>
</menu>
mymenu2:

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

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/MENU_SIZE_22"
        android:title="22">
    </item>
    <item
        android:id="@+id/MENU_SIZE_26"
        android:title="26">
    </item>
    <item
        android:id="@+id/MENU_SIZE_30"
        android:title="30">
    </item>
</menu>
MainActivity:

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

package ru.startandroid.p0152contextmenu;

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

public class MainActivity extends Activity {

    TextView tvColor, tvSize;

    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;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tvColor = (TextView) findViewById(R.id.tvColor);
        tvSize = (TextView) findViewById(R.id.tvSize);

        registerForContextMenu(tvColor);
        registerForContextMenu(tvSize);

    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v,
                                    ContextMenu.ContextMenuInfo menuInfo) {
        // TODO Auto-generated method stub
        switch (v.getId()) {
            case R.id.tvColor:
                getMenuInflater().inflate(R.menu.mymenu, menu);
                break;
            case R.id.tvSize:
                getMenuInflater().inflate(R.menu.mymenu2, menu);
                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);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}
и layout-файл activity_main.xml:

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

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <TextView
        android:layout_height="wrap_content"
        android:textSize="26sp"
        android:layout_width="wrap_content"
        android:id="@+id/tvColor"
        android:layout_marginBottom="50dp"
        android:layout_marginTop="50dp"
        android:text="Text color">
    </TextView>
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textSize="22sp"
        android:id="@+id/tvSize"
        android:text="Text size">
    </TextView>
</LinearLayout>

Попроставляй R.id. после всех case'ов и будет тебе счастье. Сам тупил около часа...

t0psecret
Сообщения: 7
Зарегистрирован: 27 янв 2016, 14:16

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

Сообщение t0psecret » 30 янв 2016, 22:59

кто-нибудь знает почему в

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

public boolean onContextItemSelected(MenuItem item)  вызываем return super.onContextItemSelected(item);
в public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.mymenu, menu);

        return super.onCreateOptionsMenu(menu);
public boolean onPrepareOptionsMenu(Menu menu) {
        menu.setGroupVisible(R.id.group1, chb.isChecked());
        return super.onPrepareOptionsMenu(menu);
    }
public boolean onOptionsItemSelected(MenuItem item) {
        StringBuilder sb = new StringBuilder();
        sb.append("Item menu");
        sb.append("\r\n groupId: " + String.valueOf(item.getGroupId()));
        sb.append("\r\n itemId: " + String.valueOf(item.getItemId()));
        sb.append("\r\n order: " + String.valueOf(item.getOrder()));
        sb.append("\r\n title: " + item.getTitle());
        tv.setText(sb.toString());
        return super.onOptionsItemSelected(item);
    }
а в

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

public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        getMenuInflater().inflate(R.menu.mymenu, menu);
        switch (v.getId()) {
            case R.id.tvColor:
                menu.setGroupVisible(R.id.group0, true);
                menu.setGroupVisible(R.id.group1, false);
                break;
            case R.id.tvSize:
                menu.setGroupVisible(R.id.group0, false);
                menu.setGroupVisible(R.id.group1, true);
                break;

        }
        //super.onCreateContextMenu(menu, v, menuInfo);
    }
нет

Предполагаю, что компилятор по аналогии с конструкторами добавляет вызов super.overridemethod , только не в начало, а в конец. Т.к. работает и с вызовом и без. Но хотелось бы узнать точно.

CrazyShotz
Сообщения: 8
Зарегистрирован: 17 фев 2016, 09:18

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

Сообщение CrazyShotz » 19 фев 2016, 11:55

Всем здравствуйте. Есть такой вопрос, существует ли что-то наподобие onPrepareOptionsMenu, только для Context Menu? Если нет, то как можно реализовать такое поведение?
Вот код:

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


public class MainActivity extends AppCompatActivity implements OnClickListener{

    TextView tvContent;
    CheckBox chb;
//    MenuItem setColor;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tvContent = (TextView) findViewById(R.id.tvContent);
        chb = (CheckBox) findViewById(R.id.chbContent);

        registerForContextMenu(tvContent);
//        tvContent.setOnCreateContextMenuListener(this);
        chb.setOnClickListener(this);
        tvContent.setOnClickListener(this);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main_menu, menu);
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        menu.setGroupVisible(R.id.group1, chb.isChecked());
        return super.onPrepareOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch_menu(item.getItemId());
        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v,
                                    ContextMenu.ContextMenuInfo menuInfo) {
        if(v.getId() == R.id.tvContent) {
            getMenuInflater().inflate(R.menu.main_menu, menu);
            super.onCreateContextMenu(menu, v, menuInfo);
        }
    }

    // Существует ли реализация подобного метода
    //public void onPrepareContextMenu(Menu menu, View v, ContextMenu.ContextMenuInfo menuInfo){}
    //public void onPrepareContextMenu(Menu menu);
    
    @Override
    public boolean onContextItemSelected(MenuItem item) {
        switch_menu(item.getItemId());
        return super.onContextItemSelected(item);
    }

    @Override
    public void onClick(View v) {
        switch(v.getId()) {
            case R.id.tvContent:
                break;
        }
    }

    public void switch_menu(int id) {
        switch(id) {
            case R.id.color_red:
                tvContent.setTextColor(Color.RED);
                break;
            case R.id.color_333:
                tvContent.setTextColor(Color.parseColor("#333333"));
                break;
            case R.id.color_666:
                tvContent.setTextColor(Color.parseColor("#666666"));
                break;
            case R.id.color_999:
                tvContent.setTextColor(Color.parseColor("#999999"));
                break;
            case R.id.color_green:
                tvContent.setTextColor(Color.GREEN);
                break;
            case R.id.color_blue:
                tvContent.setTextColor(Color.BLUE);
                break;
            case R.id.size_16:
                tvContent.setTextSize(16);
                break;
            case R.id.size_18:
                tvContent.setTextSize(18);
                break;
            case R.id.size_22:
                tvContent.setTextSize(22);
                break;
            case R.id.size_26:
                tvContent.setTextSize(26);
                break;
            case R.id.size_30:
                tvContent.setTextSize(30);
                break;
            case R.id.size_36:
                tvContent.setTextSize(36);
                break;
            case R.id.set_default:
                break;
        }
    }
}

Аватара пользователя
Nick
Сообщения: 1
Зарегистрирован: 11 май 2016, 12:14

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

Сообщение Nick » 11 май 2016, 12:34

У меня что-то не работает , случаинно не устарел этот урок ? я все сделал как в уроке аписано. вообще не какое чуство при нажатии TexView

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

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

Сообщение Foenix » 11 май 2016, 15:34

бросьте вы это меню уже к чертям
давно оно уже устарело, года два как
R.id.team

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

maxim09
Сообщения: 1
Зарегистрирован: 19 июл 2019, 14:28

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

Сообщение maxim09 » 19 июл 2019, 14:34

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

w00lfenstein
Сообщения: 2
Зарегистрирован: 30 июн 2020, 22:19

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

Сообщение w00lfenstein » 30 июн 2020, 22:28

MainActivity.java

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

package ru.startandroid.p0151contextmenu;

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

import ru.startandroid.p0151contextmenu.R;

public class MainActivity extends Activity {

    //делаем следующие строчки НЕ комментом, если не через xml меню
    //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;

    /** Called when the activity is first created. */
    @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);
    }

    //создание меню
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v,
                                    ContextMenu.ContextMenuInfo menuInfo) {
        // TODO Auto-generated method stub
        switch (v.getId()) {
            case R.id.tvColor:
                //делаем следующие строчки НЕ комментом, если не через xml меню
                //menu.add(0, MENU_COLOR_RED, 0, "Red");
                //menu.add(0, MENU_COLOR_GREEN, 0, "Green");
                //menu.add(0, MENU_COLOR_BLUE, 0, "Blue");
                getMenuInflater().inflate(R.menu.mymenu, menu);
                menu.setGroupVisible(R.id.tvSize, false);
                break;
            case R.id.tvSize:
                //делаем следующие строчки НЕ комментом, если не через xml меню
                //menu.add(0, MENU_SIZE_22, 0, "22");
                //menu.add(0, MENU_SIZE_26, 0, "26");
                //menu.add(0, MENU_SIZE_30, 0, "30");
                getMenuInflater().inflate(R.menu.mymenu, menu);
                menu.setGroupVisible(R.id.tvColor, false);
                break;
        }
    }

    //обработка нажатий
    @Override
    public boolean onContextItemSelected(MenuItem item) {
        // TODO Auto-generated method stub
        switch (item.getItemId()) {
            // пункты меню для tvColor
            //делаем следующую строчку НЕ комментом, если не через xml меню
            //case MENU_COLOR_RED:
            case R.id.MENU_COLOR_RED:
                tvColor.setTextColor(Color.RED);
                tvColor.setText("Text color = red");
                break;
            //делаем следующую строчку НЕ комментом, если не через xml меню
            //case MENU_COLOR_GREEN:
            case R.id.MENU_COLOR_GREEN:
                tvColor.setTextColor(Color.GREEN);
                tvColor.setText("Text color = green");
                break;
            //делаем следующую строчку НЕ комментом, если не через xml меню
            //case MENU_COLOR_BLUE:
            case R.id.MENU_COLOR_BLUE:
                tvColor.setTextColor(Color.BLUE);
                tvColor.setText("Text color = blue");
                break;
            // пункты меню для tvSize
            //делаем следующую строчку НЕ комментом, если не через xml меню
            //case MENU_SIZE_22:
            case R.id.MENU_SIZE_22:
                tvSize.setTextSize(22);
                tvSize.setText("Text size = 22");
                break;
            //делаем следующую строчку НЕ комментом, если не через xml меню
            //case MENU_SIZE_26:
            case R.id.MENU_SIZE_26:
                tvSize.setTextSize(26);
                tvSize.setText("Text size = 26");
                break;
            //делаем следующую строчку НЕ комментом, если не через xml меню
            //case MENU_SIZE_30:
            case R.id.MENU_SIZE_30:
                tvSize.setTextSize(30);
                tvSize.setText("Text size = 30");
                break;
        }
        return super.onContextItemSelected(item);
    }
}
mymenu.xml

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

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

    <item
        android:id="@+id/menu_edit"
        android:title="@string/edit"/>

    <item
        android:id="@+id/menu_delete"
        android:orderInCategory="3"
        android:title="@string/delete"/>

    <group
        android:id="@+id/group1">
        <item
            android:id="@+id/menu_copy"
            android:orderInCategory="1"
            android:title="@string/copy"/>

        <item
            android:id="@+id/menu_paste"
            android:orderInCategory="2"
            android:title="@string/paste"/>

        <item
            android:id="@+id/menu_exit"
            android:orderInCategory="4"
            android:title="@string/exit"/>

    </group>
</menu>
main.xml

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

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <CheckBox
        android:id="@+id/chbExtMenu"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/текст">

    </CheckBox>

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

    </TextView>
</LinearLayout>

waat
Сообщения: 17179
Зарегистрирован: 31 окт 2020, 05:30

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

Сообщение waat » 07 ноя 2020, 15:24


Ответить