/**
* 展示按钮
* @param menu 你将要演示控件
*/
@TargetApi(Build.VERSION_CODES.KITKAT)
private void showPopupMenu(View menu) {
// View当前PopupMenu显示的相对View的位置
PopupMenu popupMenu = new PopupMenu(getActivity(), menu);
Menu menu1 = popupMenu.getMenu();
// 通过代码添加菜单项
menu1.add(Menu.NONE, Menu.FIRST + 1, 1, "复制");
menu1.add(Menu.NONE, Menu.FIRST + 2, 1, "粘贴");
// 通过XML文件添加菜单项,menu布局
popupMenu.getMenuInflater().inflate(R.menu.activitys, menu1);
/*方法一:使用反射,强制显示菜单图标*/
// try {
// Field field = popupMenu.getClass().getDeclaredField("mPopup");
// field.setAccessible(true);
// MenuPopupHelper mHelper = (MenuPopupHelper) field.get(popupMenu);
// mHelper.setForceShowIcon(true);
// } catch (NoSuchFieldException | IllegalAccessException e) {
// e.printStackTrace();
// Logs.e(tag + " 137");
// }
// menu的item点击事件
popupMenu.setOnMenuItemClickListener(menuItem);
// PopupMenu关闭事件
popupMenu.setOnDismissListener(new PopupMenu.OnDismissListener() {
@Override
public void onDismiss(PopupMenu menu) {
Toast.makeText(getActivity(), "关闭PopupMenu", Toast.LENGTH_SHORT).show();
}
});
popupMenu.show();
}
/**
* popmenu的监听
*/
PopupMenu.OnMenuItemClickListener menuItem = new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_one:
SmallUtil.getActivity(getActivity(), chartViewActivity.class);
break;
case R.id.menu_two:
SmallUtil.getActivity(getActivity(), PickviewActivity.class);
break;
case R.id.menu_three:
SmallUtil.getActivity(getActivity(), ChangeLanguageActivity.class);
break;
case R.id.menu_four:
DialogLogin dialogLogin = new DialogLogin(getActivity(), new DialogLogin.putDataListener() {
@Override
public void putData(String user, String psw) {
Logs.d("账号:" + user + " " + "密码:" + psw);
}
});
break;
case R.id.menu_five:
DialogAddId idDialog = new DialogAddId(getActivity(), new DialogAddId.putIdListener() {
@Override
public void putId(String id) {
Logs.v("输入的设备ID为:" + id);
}
});
break;
case Menu.FIRST + 1:
ToastUtil.showLong("复制");
break;
case Menu.FIRST + 2:
ToastUtil.showLong("粘贴");
}
return false;
}
};
R.menu.activitys
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menu_one"
android:title="圆点变化趋势曲线图" />
<item
android:id="@+id/menu_two"
android:title="滚轮控件" />
<item
android:id="@+id/menu_three"
android:title="切换系统语言" />
<item
android:id="@+id/menu_four"
android:title="登录弹框" />
<item
android:id="@+id/menu_five"
android:title="手动输入设备ID" />
</menu>
如果你觉得系统自带的popmenu样式好丑,可以在STYLE里自定义样式
<!-- +++++++++++++++++++++++ mainActivity的style ++++++++++++++++++++++++++++++ -->
<style name="mainStyle" parent="AppTheme">
<item name="android:popupMenuStyle">@style/popmenuStyle</item>
<item name="android:dropDownListViewStyle">@style/popmenuDivier</item>
<item name="android:textAppearanceSmallPopupMenu">@style/popmeuText</item>
<item name="android:textAppearanceLargePopupMenu">@style/popmeuText</item>
</style>
<!--popMenu的Style-->
<style name="popmenuStyle" parent="@android:style/Widget.PopupMenu">
<item name="android:popupBackground">@color/black</item><!-- popMenu的背景色-->
</style>
<!--popmenu的字体颜色-->
<style name="popmeuText">
<item name="android:textColor">@color/white</item>
<item name="android:textSize">20sp</item>
<item name="android:gravity">center</item>
</style>
<!--popMenu分割线的颜色-->
<style name="popmenuDivier">
<item name="android:divider">@color/blueSky</item>
<item name="android:dividerHeight">2sp</item>
</style>
<!-- popwindow的样式 -->
<style name="PopupAnimation" parent="android:Animation">
<item name="android:windowEnterAnimation">@anim/popup_enter</item>
<item name="android:windowExitAnimation">@anim/popup_exit</item>
</style>
要在相应的Activity里面应用样式
<!-- MENU的效果实现的style添加到所在ACTIVITY里 -->
<activity
android:name=".MainActivity"
android:screenOrientation="portrait"
android:theme="@style/mainStyle" />