如何新建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>