Produção da barra de menu do Android Studio

Produção da barra de menu do Android Studio

Preparação de arquivo XML para barra de menu estática

1. Pronto para fazer o layout do arquivo XML da página de exibição da página inicial

O arquivo de layout é adequado para três tipos de barras de menu.

Aqui está uma explicação dos tipos de barras de menu: menu de opções (também conhecido como tecla de menu de três pontos), menu de contexto (menu de toque longo), menu pop-up (menu de clique)

código mostrado abaixo:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="山有木兮木有枝,心悦君兮君不知"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.242" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="选项一"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.69"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView"
        app:layout_constraintVertical_bias="0.254" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="选项二"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.309"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView"
        app:layout_constraintVertical_bias="0.252" />

</androidx.constraintlayout.widget.ConstraintLayout>

2. Prepare o arquivo de layout da barra de menu

1. Primeiro crie uma pasta XML para armazenar a barra de menu, olhe para as etapas de criação na figura abaixo, primeiro encontre res-> Novo-> Diretório

Insira a descrição da imagem aqui

2. Preencha o nome da pasta, é melhor saber o nome. (Cardápio)

Insira a descrição da imagem aqui

3. Crie um arquivo de recurso de menu, menu -> Novo -> Arquivo de recurso de menu

Insira a descrição da imagem aqui

4. Preencha o nome do arquivo de recurso recém-criado

Insira a descrição da imagem aqui

Aqui, criei dois arquivos de recursos de menu:

código mostrado abaixo:

menu1

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <item android:id="@+id/one1"
        android:title="菜单一"></item>
    <item android:id="@+id/one2"
        android:title="菜单二"></item>
    <item android:id="@+id/one3"
        android:title="菜单三"></item>
    <item android:id="@+id/one4"
        android:title="菜单四"></item>

</menu>

menu2

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width = "match_parent"
    android:layout_height = "match_parent">
    <item android:id="@+id/bu1"
        android:title="选项一"></item>
    <item android:id="@+id/bu2"
        android:title="选项一"></item>
    <item android:id="@+id/bu3"
        android:title="选项一"></item>

</menu>

Quando estiver pronto, comece a escrever o código Java abaixo.

Menu de opções

1. Defina as variáveis ​​globais necessárias

2. Obtenha os recursos das variáveis ​​globais definidas acima na função onCreate (Bundle savedInstanceState)

As duas etapas acima são obrigatórias e as etapas a seguir não serão introduzidas.

3. Reescreva o método onCreateOptionsMenu (menu Menu) da Activity, chame o objeto Menu neste método para adicionar um menu ou submenu.

4. O aplicativo precisa responder ao evento de clique do item de menu. Você pode substituir o método onOptionsItemSelected (MenuItem item) de Activity, chamar item.getItemId () para obter o ID do item de menu clicado e dar respostas diferentes

código java:

package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    //定义按钮的全局变量
    private Button button;
    private TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 绑定按钮的资源(利用id找到xml文件中的按钮)
        button = findViewById(R.id.button);
        textView = findViewById(R.id.textView);
    }

    @Override//重写获取菜单项的方法
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater=getMenuInflater();//获取菜单Inflater,MenuInflater加载menu布局文件
        inflater.inflate(R.menu.menu1,menu);//通过inflate获取菜单资源
        return true;
    }
    @Override//菜单项被点击时的逻辑处理
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case R.id.one1:
                Toast.makeText(MainActivity.this,"我是一",Toast.LENGTH_LONG).show();
                break;
            case R.id.one2:
                Toast.makeText(MainActivity.this,"我是二",Toast.LENGTH_LONG).show();
                break;
            case R.id.one3:
                Toast.makeText(MainActivity.this,"我是三",Toast.LENGTH_LONG).show();
                break;
            case R.id.one4:
                Toast.makeText(MainActivity.this,"我是四",Toast.LENGTH_LONG).show();
                break;
            default:
                return true;
        }
        return true;
    }

}

As renderizações são as seguintes:

Insira a descrição da imagem aqui

Menu contextual

1. Reescreva o método onCreateContextMenu (menu ContextMenu, Exibir v, ContextMenu.ContextMenuInfo menuInfo) da Activity.

2. Chame o método registerForContextMenu (textView) de Activity para registrar o menu de contexto para o componente View

2. Reescreva onContextItemSelected (item MenuItem) da Activity em resposta à operação de seleção do item de menu, chame item.getItemId () para obter o ID do item de menu clicado e dê diferentes respostas

package com.example.myapplication;

import androidx.appcompat.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.SubMenu;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    //定义按钮的全局变量
    private Button button;
    private TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 绑定按钮的资源(利用id找到xml文件中的按钮)
        button = findViewById(R.id.button);
        textView = findViewById(R.id.textView);
        //为组件注册上下文菜单
        registerForContextMenu(textView);
    }

	//重写Activity的onCreateContextMenu()
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo){
        switch (v.getId()){
            case R.id.textView:
                menu.setHeaderTitle("分享到,,,");
                menu.add(0,200,0,"qq空间");
                menu.add(0,201,0,"朋友圈");
                SubMenu submenu = menu.addSubMenu(0,200,0,"微博");
                submenu.add(0,202,0,"新浪");
                submenu.add(0,203,0,"新浪");
                submenu.add(0,204,0,"新浪");
            default:
                break;
        }
        super.onCreateContextMenu(menu,v,menuInfo);
    }
    
    //重写Activity的onContextItemSelected()
    public boolean onContextItemSelected(MenuItem item){
        switch (item.getItemId()){
            case 200:
                Toast.makeText(MainActivity.this,"你选了一",Toast.LENGTH_LONG).show();
                break;
            case 201:
                Toast.makeText(MainActivity.this,"你选了二",Toast.LENGTH_LONG).show();
                break;
            case 203:
                Toast.makeText(MainActivity.this,"你选了三",Toast.LENGTH_LONG).show();
                break;
            case 204:
                Toast.makeText(MainActivity.this,"你选了四",Toast.LENGTH_LONG).show();
                break;
            default:
                return super.onOptionsItemSelected(item);
        }
        return true;
    }

}

A imagem do efeito é a seguinte: (Pressão longa!)

[Falha na transferência da imagem do link externo. O site de origem pode ter um mecanismo anti-hotlinking. Recomenda-se salvar a imagem e carregá-la diretamente (img-YgbhJl29-1602769116363) (C: \ Users \ FL \ AppData \ Roaming \ Typora \ typora-user-images \ image-20201012193350004.png)]

Menu popup

1. Chame o novo PopupMenu (contexto de contexto, Exibir âncora) para criar um menu suspenso, âncora representa o componente que deseja ativar o menu pop-up

2. Chame o método inflate () de MenuInflater para preencher o recurso de menu no PopupMenu

transformar super.onOptionsItemSelected (item);
}
return true;
}

}

Menu popup

1. Chame o novo PopupMenu (contexto de contexto, Exibir âncora) para criar um menu suspenso, âncora representa o componente que deseja ativar o menu pop-up

2. Chame o método inflate () de MenuInflater para preencher o recurso de menu no PopupMenu

3. Chame o método show () do PopupMenu para exibir o menu pop-up

   package com.example.myapplication;

   import androidx.annotation.RequiresApi;
   import androidx.appcompat.app.AppCompatActivity;
   import androidx.appcompat.view.menu.MenuPopupHelper;

   import android.annotation.SuppressLint;
   import android.os.Build;
   import android.os.Bundle;
   import android.view.ContextMenu;
   import android.view.Menu; 
   import android.view.MenuInflater;
   import android.view.MenuItem;
   import android.view.SubMenu; 
   import android.view.View;
   import android.widget.Button;
   import android.widget.PopupMenu;
   import android.widget.TextView;
   import android.widget.Toast;
   import android.widget.TextView;
   import android.widget.Toast; 
   import java.lang.reflect.Field;
   import java.lang.reflect.Method;

    public class MainActivity extends AppCompatActivity {
    //定义按钮的全局变量
    private Button button;
    private TextView textView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 绑定按钮的资源(利用id找到xml文件中的按钮)
        button = findViewById(R.id.button);
        textView = findViewById(R.id.textView);
        registerForContextMenu(textView);

        button.setOnClickListener(new View.OnClickListener() {
            @SuppressLint("RestrictedApi")
            @RequiresApi(api = Build.VERSION_CODES.KITKAT)
            @Override
            public void onClick(View v) {
                //创建PopupMenu
                PopupMenu popupMenu = new PopupMenu(MainActivity.this,button);
                //加载菜单资源
                popupMenu.getMenuInflater().inflate(R.menu.menu2, popupMenu.getMenu());
                //菜单事件监听
                popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener(){

                    @Override
                    public boolean onMenuItemClick(MenuItem item) {
                        switch (item.getItemId()){
                            case R.id.bu1:
                                Toast.makeText(MainActivity.this,"复制",Toast.LENGTH_LONG).show();
                                break;
                            case R.id.bu2:
                                Toast.makeText(MainActivity.this,"粘贴",Toast.LENGTH_LONG).show();
                                break;
                            case R.id.bu3:
                                Toast.makeText(MainActivity.this,"清除",Toast.LENGTH_LONG).show();
                                break;
                            default:
                                break;
                        }
                        return true;
                    }
                });
                //使用反射,强制显示菜单图标
             	try {
                	Field field = popupMenu.getClass().getDeclaredField("mm");
               	 	field.setAccessible(true);
                	MenuPopupHelper menuPopupHelper = (MenuPopupHelper) field.get(popupMenu);
               	 	menuPopupHelper.setForceShowIcon(true);
               }catch (IllegalAccessException | NoSuchFieldException e){
                	e.printStackTrace();
            }
                popupMenu.show();
            }
        });

    }
 }

Insira a descrição da imagem aqui

///
///
///

Existem muitos nomes de pacote para o código Java. Se houver um método que não consegue encontrar nenhum pacote, você pode usar o atalho "Alt + Enter" para ajudá-lo a encontrar o pacote ou outro que precise ser importado neste local.
A introdução de todo o código é cumulativa, desde a primeira gravação até o último menu.

Acho que você gosta

Origin blog.csdn.net/leilei__66/article/details/109106105
Recomendado
Clasificación