Barra de menú de Android La explicación del uso del menú es suficiente para leer este artículo

Barra de menú Explicación del uso del menú

¡Poco conocimiento, gran desafío! Este artículo está participando en la creación de " Consejos para programadores ".

Este artículo ha participado en  el "Programa Estrella de Explotación"  para ganar paquetes de regalos creativos y desafiar incentivos creativos.

Los menús son una parte muy importante y común de las aplicaciones de Android. Puede ahorrar en gran medida el espacio utilizado por nuestra página y mejorar la tasa de utilización de la página. Hay tres menús comunes en Android:

  • OptionMenu : menú de opciones, el menú más común en Android, llamado por la tecla Menú
  • ContextMenu : menú contextual, el menú que aparece después de presionar prolongadamente un componente de vista, el componente debe registrar el menú contextual
  • SubMenú : Submenú, al hacer clic en el submenú en Android aparecerá un cuadro flotante que muestra los elementos del submenú, el submenú no admite anidamiento, es decir, no puede incluir otros submenús

Cómo definir el menú

  • Uno directamente escribiendo el archivo XML del menú y luego llamando: getMenuInflater().inflate(R.menu.menu_main, menu); cargar el menú
  • Agregue dinámicamente a través del código, el menú de parámetros de onCreateOptionsMenu, llame al método add para agregar el menú, agregue (número de grupo, ID, número de clasificación, título del elemento del menú) , y si el número de clasificación está ordenado en el orden de adición, completa 0!

Por lo general, usamos XML para definir el menú, que puede reducir el código inflado del código Java, y no es necesario usar el código para asignar una identificación cada vez, simplemente modifique el archivo XML para modificar el contenido del menú, por lo que, hasta cierto punto, el programa proporciona mejor desacoplamiento, bajo acoplamiento, alta cohesión

Podemos definir Menú usando tres elementos XML <menu>:<item><group>

<menu>es el contenedor de los elementos del menú. <menu>El elemento debe ser el nodo raíz del archivo y puede contener uno o más elementos <item>AND <group>. <item>es un elemento de menú, que se utiliza para definir MenuItem, los elementos se pueden anidar <menu>para crear submenús. <group>es <item>un contenedor invisible para el elemento (opcional). Puede usarlo para agrupar elementos de menú para que un grupo de elementos de menú comparta atributos como la usabilidad y la visibilidad.

Entre ellos, <item>se encuentra nuestro elemento principal, y sus atributos comunes son los siguientes:

android:id: el identificador único del elemento del menú (MenuItem) android:icon: el icono del elemento del menú (opcional) android:title: el título del elemento del menú (obligatorio) android:showAsAction: especifica el método de visualización del elemento del menú. Los más utilizados son ifRoom, never, always, withTexty múltiples valores de atributo pueden estar separados por |.

1. Menú de opciones (OptionMenu)

1. Métodos comúnmente utilizados:

//调用OptionMenu,在这里完成菜单初始化和加载
public boolean onCreateOptionsMenu(Menu menu)
//菜单项被选中时触发,这里完成事件处理
public boolean onOptionsItemSelected(MenuItem item)

//菜单关闭会调用该方法
public void onOptionsMenuClosed(Menu menu)
//选项菜单显示前会调用该方法, 可在这里进行菜单的调整(动态加载菜单列表)
public boolean onPrepareOptionsMenu(Menu menu)
//选项菜单打开以后会调用这个方法
public boolean onMenuOpened(int featureId, Menu menu)
复制代码

2. Ejemplos

Lograr esto es muy simple.

inserte la descripción de la imagen aquí

realizar:

Estructura del proyecto

inserte la descripción de la imagen aquí

  1. Primero cree una carpeta de menú en el directorio de recursos res y luego cree una

Archivo de recursos de menú denominado menu_optionmenu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/menu1"
        android:title="创建群聊"
        android:icon="@drawable/groupchat"/>
    <item
        android:id="@+id/menu2"
        android:title="加好友/群"
        android:icon="@drawable/add"/>
    <item
        android:id="@+id/menu3"
        android:title="一起派对"
        android:icon="@drawable/party"/>
    <item
        android:id="@+id/menu4"
        android:title="扫一扫"
        android:icon="@drawable/scan"/>
    <item
        android:id="@+id/menu5"
        android:title="面对面快传"
        android:icon="@drawable/quick_pass"/>
    <item
        android:id="@+id/menu6"
        android:title="收付款"
        android:icon="@drawable/payment"/>
</menu>
复制代码
  1. codigo java
public class MainActivity extends AppCompatActivity {


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

        mTextView=findViewById(R.id.text);
    }

    //该方法用于创建显示Menu
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_optionmenu,menu);
        return true;
    }

    //在选项菜单打开以后会调用这个方法,设置menu图标显示(icon)
    @Override
    public boolean onMenuOpened(int featureId, Menu menu) {
        if (menu != null) {
            if (menu.getClass().getSimpleName().equalsIgnoreCase("MenuBuilder")) {
                try {
                    Method method = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE);
                    method.setAccessible(true);
                    method.invoke(menu, true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        return super.onMenuOpened(featureId, menu);
    }

    //该方法对菜单的item进行监听
    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        mTextView.setText(item.getTitle());
        switch (item.getItemId()) {
            case R.id.menu1:
                Toast.makeText(this, "点击了第" + 1 + "个", Toast.LENGTH_SHORT).show();
                break;
            case R.id.menu2:
                Toast.makeText(this, "点击了第" + 2 + "个", Toast.LENGTH_SHORT).show();
                break;
            case R.id.menu3:
                Toast.makeText(this, "点击了第" + 3 + "个", Toast.LENGTH_SHORT).show();
                break;
            case R.id.menu4:
                Toast.makeText(this, "点击了第" + 4 + "个", Toast.LENGTH_SHORT).show();
                break;
            case R.id.menu5:
                Toast.makeText(this, "点击了第" + 5 + "个", Toast.LENGTH_SHORT).show();
                break;
        }
        return super.onOptionsItemSelected(item);
    }
}

复制代码

Si queremos crear nuestro menú con código java, solo necesitamos agregarlo con el método add de menú en el método onCreateOptionsMenu.

 @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        //add的参数(菜单项的组号,ID,排序号,标题)
        menu.add(1,1,1,"创建群聊");
        menu.add(1,1,2,"加好友/群");
        menu.add(1,1,3,"一起派对");
        menu.add(1,1,4,"扫一扫");
        menu.add(1,1,5,"面对面快传");
        menu.add(1,1,6,"收付款");
        //getMenuInflater().inflate(R.menu.menu_mian,menu);
        return true;
    }
复制代码

En segundo lugar, el menú contextual (ContextMenu)

1. Pasos de uso:

  1. Anular el método onCreateContextMenu()
  2. Registre el menú contextual para el componente de vista, use el método registerForContextMenu(), el parámetro es Ver
  3. Anule el método onContextItemSelected() para especificar detectores de eventos para los elementos del menú

2. Ejemplos

inserte la descripción de la imagen aquí

realizar:
  1. Cree un nuevo menu_context.xml en el archivo de menú
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 定义一组单选按钮 -->
    <!-- checkableBehavior的可选值由三个:single设置为单选,all为多选,none为普通选项 -->
    <group android:checkableBehavior="none">
        <item android:id="@+id/blue" android:title="蓝色"/>
        <item android:id="@+id/green" android:title="绿色"/>
        <item android:id="@+id/red" android:title="红色"/>
        <item android:id="@+id/yellow" android:title="黄色"/>
    </group>
</menu>
复制代码
  1. codigo java
public class MainActivity extends AppCompatActivity {


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

        mTextView=findViewById(R.id.text);

        registerForContextMenu(mTextView);//注册上下文菜单
    }

    //重写上下文菜单的创建方法
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        MenuInflater inflator = new MenuInflater(this);
        inflator.inflate(R.menu.menu_context, menu);
        super.onCreateContextMenu(menu, v, menuInfo);
    }

    //上下文菜单的点击事件
    @Override
    public boolean onContextItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case R.id.blue:
                mTextView.setTextColor(Color.BLUE);
                break;
            case R.id.green:
                mTextView.setTextColor(Color.GREEN);
                break;
            case R.id.red:
                mTextView.setTextColor(Color.RED);
                break;
            case R.id.yellow:
                mTextView.setTextColor(Color.YELLOW);
                break;
        }
        return super.onContextItemSelected(item);
    }
}

复制代码

3. Submenú (Submenú)

Un submenú es una capa de < menú > anidada en < elemento > , o se puede anidar una capa más.

1. Ejemplo:

inserte la descripción de la imagen aquí

  1. Cree un nuevo menu_sub.xml en el archivo de menú
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/colour" android:title="变颜色~">
        <menu>
            <group android:checkableBehavior = "none">
                <item android:id="@+id/colour_blue" android:title="蓝色"/>
                <item android:id="@+id/colour_green" android:title="绿色"/>
                <item android:id="@+id/colour_red" android:title="红色"/>
                <item android:id="@+id/colour_yellow" android:title="黄色"/>
            </group>
        </menu>
    </item>
    <item android:id="@+id/font_size" android:title="变字体大小~">
        <menu>
            <group android:checkableBehavior = "none">
                <item android:id="@+id/font_size_10sp" android:title = "10sp"/>
                <item android:id="@+id/font_size_30sp" android:title = "30sp"/>
                <item android:id="@+id/font_size_50sp" android:title = "50sp"/>
                <item android:id="@+id/font_size_70sp" android:title = "70sp"/>
            </group>
        </menu>
    </item>
    <item android:id="@+id/text" android:title="变文字~">
        <menu>
            <group android:checkableBehavior = "none">
                <item android:id="@+id/text_hello" android:title = "你好"/>
                <item android:id="@+id/text_menu" android:title = "菜单"/>
                <item android:id="@+id/text_MQ" android:title = "毛小钱"/>
                <item android:id="@+id/text_div" android:title = "自定义"/>
            </group>
        </menu>
    </item>
</menu>
复制代码
  1. codigo java
public class MainActivity extends AppCompatActivity {


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

        mTextView=findViewById(R.id.text);

        registerForContextMenu(mTextView);//注册上下文菜单
    }

    //重写上下文菜单的创建方法
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        MenuInflater inflator = new MenuInflater(this);
        inflator.inflate(R.menu.menu_sub, menu);
        super.onCreateContextMenu(menu, v, menuInfo);
    }

    //上下文菜单的点击事件
    @Override
    public boolean onContextItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case R.id.colour_blue:
                mTextView.setTextColor(Color.BLUE);
                break;
            case R.id.colour_green:
                mTextView.setTextColor(Color.GREEN);
                break;
            case R.id.colour_red:
                mTextView.setTextColor(Color.RED);
                break;
            case R.id.colour_yellow:
                mTextView.setTextColor(Color.YELLOW);
                break;
            case R.id.font_size_10sp:
                mTextView.setTextSize(TypedValue.COMPLEX_UNIT_SP,10);
                break;
            case R.id.font_size_30sp:
                mTextView.setTextSize(TypedValue.COMPLEX_UNIT_SP,30);
                break;
            case R.id.font_size_50sp:
                mTextView.setTextSize(TypedValue.COMPLEX_UNIT_SP,50);
                break;
            case R.id.font_size_70sp:
                mTextView.setTextSize(TypedValue.COMPLEX_UNIT_SP,70);
                break;
            case R.id.text_hello:
            case R.id.text_menu:
            case R.id.text_MQ:
                mTextView.setText(item.getTitle());
                break;
            case R.id.text_div:
                final EditText editText = new EditText(this);
                AlertDialog dialog = new AlertDialog.Builder(this).setTitle("请输入要自定义的文字")
                        .setView(editText)
                        .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialogInterface, int i) {
                                mTextView.setText(editText.getText().toString());
                            }
                        })
                        .setNegativeButton("取消",null)
                        .show();
                break;
        }
        return super.onContextItemSelected(item);
    }
}
复制代码

Aprende sobre el uso del Menú aquí.

Dale me gusta y ¡vamos!

Supongo que te gusta

Origin juejin.im/post/7013970285393084423
Recomendado
Clasificación