安卓开发---menu

如何新建menu文件夹

第一步

第二步 选中menu,然后点击ok

1.选项菜单(Options Menu):这是应用的主菜单,可通过设备上的菜单按钮或者点击工具栏的溢出图标来打开。选项菜单通常借助设备的菜单按钮或者应用栏(App Bar)上的溢出图标(三个点)来开启。

2.上下文菜单(Context Menu):长按视图时弹出的菜单,类似于右键菜单。上下文菜单分为:传统上下文菜单和上下文操作模式

3.弹出菜单(Popup Menu):点击视图后在其附近弹出的菜单。

1.1选项菜单的使用步骤

①定义菜单资源:在 res/menu/ 目录下创建 XML 文件,以此定义菜单项。

②加载菜单资源:在 Activity 里重写 onCreateOptionsMenu() 方法。

③处理菜单项点击事件:重写 onOptionsItemSelected() 方法。
关键属性:

showAsAction:用于控制菜单项的显示位置,其取值可以是 ifRoom、always、never 等。

(always:表示始终显示为Action按钮,不折叠到溢出菜单;
ifRoom:表示若ActionBar有空间则显示为Action按钮,空间不足时折叠到溢出菜单;
never:始终位于溢出菜单中

orderInCategory:用来指定菜单项的排序顺序。

res/menu/main_menu.xml

<menuxmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:app="http://schemas.android.com/apk/res-auto">

    <item

        android:id="@+id/action_search"

        android:icon="@android:drawable/ic_menu_search"

        android:title="搜索"

        app:showAsAction="ifRoom" />

    <item

        android:id="@+id/action_settings"

        android:title="设置"

        app:showAsAction="never" />
</menu>


// Activity 中

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    getMenuInflater().inflate(R.menu.main_menu, menu);

    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    int id = item.getItemId();

    if (id == R.id.action_search) {

        // 处理搜索操作

        return true;

    }

    return super.onOptionsItemSelected(item);
}

2.1 上下文菜单的使用步骤

①注册上下文菜单:调用 registerForContextMenu(view) 方法。

②创建上下文菜单:重写 onCreateContextMenu() 方法。

③处理菜单项点击事件:重写 onContextItemSelected() 方法。


// 注册上下文菜单

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    ListView listView = findViewById(R.id.listView);

    registerForContextMenu(listView);}

// 创建上下文菜单
@Overridepublic void onCreateContextMenu(ContextMenu menu, View v,

                                ContextMenu.ContextMenuInfo menuInfo) {

    super.onCreateContextMenu(menu, v, menuInfo);

    MenuInflater inflater = getMenuInflater();

    inflater.inflate(R.menu.context_menu, menu);
}

// 处理点击事件
@Override
public boolean onContextItemSelected(MenuItem item) {

    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();

    switch (item.getItemId()) {

        case R.id.edit:

            // 编辑操作

            return true;

        case R.id.delete:

            // 删除操作

            return true;

        default:

            return super.onContextItemSelected(item);

}}

3.1 弹出菜单的使用步骤

①创建 PopupMenu 实例:传入上下文和锚点视图。

②加载菜单资源:调用 inflate() 方法。

③显示菜单:调用 show() 方法。

④处理点击事件:设置 OnMenuItemClickListener。

// 创建并显示弹出菜单
View menuButton = findViewById(R.id.menu_button);
PopupMenu popup = new PopupMenu(this, menuButton);

popup.getMenuInflater().inflate(R.menu.popup_menu, popup.getMenu());

// 设置菜单项点击监听器

popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {

    @Override

    public boolean onMenuItemClick(MenuItem item) {

        switch (item.getItemId()) {

            case R.id.action_share:

                // 分享操作

                return true;

            case R.id.action_copy:

                // 复制操作

                return true;

            default:

                return false;

        }

    }});

// 显示菜单

popup.show();

选项菜单的实例

MainActivity.java

import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    private boolean isDarkMode = false;

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

        // 设置Toolbar作为ActionBar
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
    }

    // 创建选项菜单
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main_menu, menu);
        return true;
    }

    // 动态更新菜单
    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        MenuItem darkModeItem = menu.findItem(R.id.action_dark_mode);
        darkModeItem.setTitle(isDarkMode ? "切换到亮色模式" : "切换到暗色模式");
        darkModeItem.setIcon(isDarkMode ? R.drawable.ic_launcher_background : R.drawable.ic_success);
        return super.onPrepareOptionsMenu(menu);
    }

    // 处理菜单项点击事件
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();

        if (id == R.id.action_search) {
            showToast("搜索功能已触发");
            return true;
        } else if (id == R.id.action_settings) {
            showToast("设置页面将打开");
            return true;
        } else if (id == R.id.action_share) {
            showToast("分享功能已触发");
            return true;
        } else if (id == R.id.action_dark_mode) {
            isDarkMode = !isDarkMode;
            showToast(isDarkMode ? "已启用暗色模式" : "已启用亮色模式");
            invalidateOptionsMenu(); // 刷新菜单
            return true;
        } else {
            return super.onOptionsItemSelected(item);
        }

    }

    private void showToast(String message) {
        Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
    }
}

activity_main.xml

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

    <!-- Toolbar -->
    <androidx.appcompat.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        android:elevation="4dp"
        android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

    <!-- 主内容区域 -->
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="32dp"
        android:text="选项菜单示例"
        android:textSize="24sp" />
</LinearLayout>

main_menu.xml

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

        <!-- 直接显示在Toolbar上的菜单项 -->
        <item
            android:id="@+id/action_search"
            android:icon="@android:drawable/ic_menu_search"
            android:title="搜索"
            app:showAsAction="always" />

        <item
            android:id="@+id/action_dark_mode"
            android:icon="@drawable/ic_success"
            android:title="切换到暗色模式"
            app:showAsAction="always" />

        <!-- 显示在溢出菜单中的菜单项 -->
        <item
            android:id="@+id/action_settings"
            android:icon="@android:drawable/ic_menu_preferences"
            android:title="设置"
            app:showAsAction="always" />

        <item
            android:id="@+id/action_share"
            android:icon="@android:drawable/ic_menu_share"
            android:title="分享"
            app:showAsAction="never" />

        <!-- 子菜单示例 -->
        <item
            android:id="@+id/action_more"
            android:title="更多"
            app:showAsAction="never">
            <menu>
                <item
                    android:id="@+id/action_help"
                    android:title="帮助" />
                <item
                    android:id="@+id/action_about"
                    android:title="关于" />
            </menu>
        </item>
</menu>

传统上下文菜单的实例(MainActivity.java & activity_main.xml & context_menu.xml)

MainActivity.java

package com.example.test;

import androidx.appcompat.app.AppCompatActivity;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    private ListView listView;
    private ArrayAdapter<String> adapter;
    private ArrayList<String> itemList = new ArrayList<>();
    private int selectedPosition;

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

        // 初始化列表数据
        for (int i = 1; i <= 20; i++) {
            itemList.add("项目 " + i);
        }

        listView = findViewById(R.id.listView);
        adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, itemList);
        listView.setAdapter(adapter);

        // 为ListView注册上下文菜单
        registerForContextMenu(listView);

        // 长按监听(可选)
        listView.setOnItemLongClickListener((parent, view, position, id) -> {
            selectedPosition = position;
            return false; // 返回false以继续显示上下文菜单
        });
    }

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

        // 从XML加载菜单
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.context_menu, menu);

        // 可以动态修改菜单项
        menu.setHeaderTitle("操作: " + itemList.get(selectedPosition));
    }

    @Override
    public boolean onContextItemSelected(MenuItem item) {
        // 获取点击的位置
        AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
        int position = info != null ? info.position : selectedPosition;

        if (item.getItemId() == R.id.action_edit) {
            Toast.makeText(this, "编辑: " + itemList.get(position), Toast.LENGTH_SHORT).show();
            return true;
        } else if (item.getItemId() == R.id.action_delete) {
            itemList.remove(position);
            adapter.notifyDataSetChanged();
            Toast.makeText(this, "已删除项目", Toast.LENGTH_SHORT).show();
            return true;
        } else if (item.getItemId() == R.id.action_share) {
            shareItem(position);
            return true;
        } else if (item.getItemId() == R.id.action_copy) {
            copyToClipboard(itemList.get(position));
            Toast.makeText(this, "已复制到剪贴板", Toast.LENGTH_SHORT).show();
            return true;
        } else {
            return super.onContextItemSelected(item);
        }
    }

    private void shareItem(int position) {
        Intent shareIntent = new Intent(Intent.ACTION_SEND);
        shareIntent.setType("text/plain");
        shareIntent.putExtra(Intent.EXTRA_TEXT, itemList.get(position));
        startActivity(Intent.createChooser(shareIntent, "分享项目"));
    }

    private void copyToClipboard(String text) {
        ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
        ClipData clip = ClipData.newPlainText("项目内容", text);
        clipboard.setPrimaryClip(clip);
    }
}

activity_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"
    android:padding="16dp">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="长按下方列表项显示上下文菜单"
        android:textSize="18sp"
        android:layout_marginBottom="16dp"/>

    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</LinearLayout>

context_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
    android:id="@+id/action_edit"
    android:title="编辑"/>
    <item
        android:id="@+id/action_delete"
        android:title="删除"/>
    <item
        android:id="@+id/action_share"
        android:title="分享"/>
    <item
        android:id="@+id/action_copy"
        android:title="复制"/>
    <item

        android:title="重命名"/>
    <item

        android:title="刷新"/>
    <item

        android:title="排序方式"/>
    <item

        android:title="新建"/>
</menu>

上下文操作模式实例(MainActivity.java & activity_main.xml & MyAdapter.java & context_action_mode.xml  )

MainActivity.java

package com.example.test;

import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.view.ActionMode;
import androidx.appcompat.widget.Toolbar;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    private RecyclerView recyclerView;
    private MyAdapter adapter;
    private List<String> itemList = new ArrayList<>();
    private ActionMode actionMode;
    private Toolbar toolbar;

    // 实现ActionMode回调
    private ActionMode.Callback actionModeCallback = new ActionMode.Callback() {
        @Override
        public boolean onCreateActionMode(ActionMode mode, Menu menu) {
            // 加载菜单
            MenuInflater inflater = mode.getMenuInflater();
            inflater.inflate(R.menu.context_action_mode, menu);
            return true;
        }

        @Override
        public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
            return false; // 返回false表示不做任何改变
        }

        @Override
        public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
            if (item.getItemId() == R.id.action_delete) {
                deleteSelectedItems();
                mode.finish(); // 操作完成后关闭ActionMode
                return true;
            } else if (item.getItemId() == R.id.action_share) {
                shareSelectedItems();
                return true;
            } else if (item.getItemId() == R.id.action_copy) {
                copySelectedItems();
                return true;
            } else {
                return false;
            }
        }

        @Override
        public void onDestroyActionMode(ActionMode mode) {
            // 清理选择状态
            adapter.clearSelections();
            actionMode = null;
        }
    };

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

        toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        // 初始化数据
        for (int i = 1; i <= 20; i++) {
            itemList.add("项目 " + i);
        }

        recyclerView = findViewById(R.id.recyclerView);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        adapter = new MyAdapter(itemList);
        recyclerView.setAdapter(adapter);

        // 设置项目点击/长按监听
        adapter.setOnItemClickListener(new MyAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(int position) {
                if (actionMode != null) {
                    toggleSelection(position);
                }
            }

            @Override
            public void onItemLongClick(int position) {
                if (actionMode == null) {
                    // 启动ActionMode
                    actionMode = startSupportActionMode(actionModeCallback);
                }
                toggleSelection(position);
            }
        });
    }

    private void toggleSelection(int position) {
        adapter.toggleSelection(position);
        int count = adapter.getSelectedItemCount();

        if (count == 0) {
            actionMode.finish();
        } else {
            actionMode.setTitle(count + " 已选择");
            actionMode.invalidate();
        }
    }

    private void deleteSelectedItems() {
        List<Integer> selectedItems = adapter.getSelectedItems();
        // 从大到小删除避免位置错乱
        Collections.sort(selectedItems, Collections.reverseOrder());
        for (int position : selectedItems) {
            itemList.remove(position);
        }
        adapter.notifyDataSetChanged();
        Toast.makeText(this, "已删除 " + selectedItems.size() + " 个项目", Toast.LENGTH_SHORT).show();
    }

    private void shareSelectedItems() {
        List<Integer> selectedItems = adapter.getSelectedItems();
        StringBuilder shareText = new StringBuilder();
        for (int position : selectedItems) {
            shareText.append(itemList.get(position)).append("\n");
        }

        Intent shareIntent = new Intent(Intent.ACTION_SEND);
        shareIntent.setType("text/plain");
        shareIntent.putExtra(Intent.EXTRA_TEXT, shareText.toString());
        startActivity(Intent.createChooser(shareIntent, "分享项目"));
    }

    private void copySelectedItems() {
        List<Integer> selectedItems = adapter.getSelectedItems();
        StringBuilder copyText = new StringBuilder();
        for (int position : selectedItems) {
            copyText.append(itemList.get(position)).append("\n");
        }

        ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
        ClipData clip = ClipData.newPlainText("项目内容", copyText.toString());
        clipboard.setPrimaryClip(clip);
        Toast.makeText(this, "已复制 " + selectedItems.size() + " 个项目", Toast.LENGTH_SHORT).show();
    }
}

activity_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">

    <androidx.appcompat.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"/>

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</LinearLayout>

MyAdapter.java

package com.example.test;

import android.graphics.Color;
import android.util.SparseBooleanArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import androidx.recyclerview.widget.RecyclerView;

import java.util.ArrayList;
import java.util.List;

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
    private List<String> itemList;
    private SparseBooleanArray selectedItems = new SparseBooleanArray();
    private OnItemClickListener listener;

    public interface OnItemClickListener {
        void onItemClick(int position);
        void onItemLongClick(int position);
    }

    public void setOnItemClickListener(OnItemClickListener listener) {
        this.listener = listener;
    }

    public static class ViewHolder extends RecyclerView.ViewHolder {
        TextView textView;
        View rootView;

        public ViewHolder(View itemView) {
            super(itemView);
            textView = itemView.findViewById(android.R.id.text1);
            rootView = itemView;
        }
    }

    public MyAdapter(List<String> itemList) {
        this.itemList = itemList;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext())
                .inflate(android.R.layout.simple_list_item_1, parent, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        holder.textView.setText(itemList.get(position));

        // 设置选中状态背景
        holder.rootView.setBackgroundColor(
                selectedItems.get(position) ? Color.LTGRAY : Color.TRANSPARENT
        );

        // 设置点击监听
        holder.rootView.setOnClickListener(v -> {
            if (listener != null) {
                listener.onItemClick(position);
            }
        });

        holder.rootView.setOnLongClickListener(v -> {
            if (listener != null) {
                listener.onItemLongClick(position);
            }
            return true;
        });
    }

    @Override
    public int getItemCount() {
        return itemList.size();
    }

    public void toggleSelection(int position) {
        if (selectedItems.get(position, false)) {
            selectedItems.delete(position);
        } else {
            selectedItems.put(position, true);
        }
        notifyItemChanged(position);
    }

    public void clearSelections() {
        selectedItems.clear();
        notifyDataSetChanged();
    }

    public int getSelectedItemCount() {
        return selectedItems.size();
    }
    public List<Integer> getSelectedItems() {
        List<Integer> items = new ArrayList<>(selectedItems.size());
        for (int i = 0; i < selectedItems.size(); i++) {
            items.add(selectedItems.keyAt(i));
        }
        return items;
    }
}

context_action_mode.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/action_delete"
        android:title="删除"
        android:icon="@android:drawable/ic_menu_delete"
        app:showAsAction="ifRoom"/>
    <item
        android:id="@+id/action_share"
        android:title="分享"
        android:icon="@android:drawable/ic_menu_share"
        app:showAsAction="ifRoom"/>
    <item
        android:id="@+id/action_copy"
        android:title="复制"
        android:icon="@android:drawable/ic_menu_edit"
        app:showAsAction="never"/>
</menu>

弹出菜单实例(MainActivity.java & activity_main.xml & popup_menu.xml)

MainActivity.java

package com.example.test;

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.PopupMenu;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    private Button showPopupButton;

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

        // 初始化按钮
        showPopupButton = findViewById(R.id.showPopupButton);
        showPopupButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                showPopupMenu(v);
            }
        });
    }

    // 显示弹出菜单
    private void showPopupMenu(View anchorView) {
        // 创建弹出菜单
        PopupMenu popupMenu = new PopupMenu(this, anchorView);

        // 加载菜单资源
        popupMenu.getMenuInflater().inflate(R.menu.popup_menu, popupMenu.getMenu());

        // 设置菜单项点击监听器
        popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                if (item.getItemId() == R.id.action_edit) {
                    Toast.makeText(MainActivity.this, "编辑", Toast.LENGTH_SHORT).show();
                    return true;
                } else if (item.getItemId() == R.id.action_delete) {
                    Toast.makeText(MainActivity.this, "删除", Toast.LENGTH_SHORT).show();
                    return true;
                } else if (item.getItemId() == R.id.action_share) {
                    Toast.makeText(MainActivity.this, "分享", Toast.LENGTH_SHORT).show();
                    return true;
                } else if (item.getItemId() == R.id.action_settings) {
                    Toast.makeText(MainActivity.this, "设置", Toast.LENGTH_SHORT).show();
                    return true;
                } else {
                    return false;
                }
            }
        });

        // 设置弹出菜单的关闭监听器
        popupMenu.setOnDismissListener(new PopupMenu.OnDismissListener() {
            @Override
            public void onDismiss(PopupMenu menu) {
                Toast.makeText(MainActivity.this, "菜单已关闭", Toast.LENGTH_SHORT).show();
            }
        });

        // 动态修改菜单内容
        MenuItem shareItem = popupMenu.getMenu().findItem(R.id.action_share);
        shareItem.setTitle("分享到...");

        // 显示弹出菜单
        popupMenu.show();
    }
}

activity_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"
    android:gravity="center_horizontal"
    android:padding="16dp">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="点击按钮显示弹出菜单"
        android:textSize="18sp"
        android:layout_marginBottom="32dp"/>

    <Button
        android:id="@+id/showPopupButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="显示菜单"
        android:padding="16dp"
        android:textSize="16sp"/>
</LinearLayout>

popup_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/action_edit"
        android:title="编辑"
        android:icon="@android:drawable/ic_menu_edit"/>
    <item
        android:id="@+id/action_delete"
        android:title="删除"
        android:icon="@android:drawable/ic_menu_delete"/>
    <item
        android:id="@+id/action_share"
        android:title="分享"
        android:icon="@android:drawable/ic_menu_share"/>

    <!-- 添加分隔线 -->
    <item
        android:title=""
        android:enabled="false"
        android:visible="true"/>

    <item
        android:id="@+id/action_settings"
        android:title="设置"
        android:icon="@android:drawable/ic_menu_preferences"/>

    <item
        android:title="刷新"
        />
</menu>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值