自定义的ActionProvider在ActionBar中点击了没显示出来,新手求解
主要代码:
自定ActionProvider的代码:
import android.content.Context;
import android.view.ActionProvider;
import android.view.MenuItem;
import android.view.SubMenu;
import android.view.View;
/**
* Created by mq on 2016-02-02.
*/
public class stu_ActionProvider extends ActionProvider {
public stu_ActionProvider(Context context) {
super(context);
}
@Override
public View onCreateActionView() {
return null;
}
@Override
public void onPrepareSubMenu(SubMenu subMenu) {
super.onPrepareSubMenu(subMenu);
subMenu.clear();
subMenu.add("添加学员").setIcon(R.drawable.stu_press);
subMenu.add("我的学员").setIcon(R.drawable.stu_press);
subMenu.add("网络学员").setIcon(R.drawable.stu_press);
}
@Override
public boolean hasSubMenu() {
return true;
}
}
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"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.mq.oa.Index">
<item
android:id="@+id/action_share"
android:actionProviderClass="com.mq.oa.stu_ActionProvider"
android:icon="@drawable/caidan"
app:showAsAction="ifRoom"
android:title="更多功能" />
</menu>
最后是Activity.java的主要代码:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.stu_menu, menu);
return true;
}
// Menu中overflower菜单图标显示实现【重写onMenuOpened方法,使用反射原理】
@Override
public boolean onMenuOpened(int featureId, Menu menu) {
if (featureId == Window.FEATURE_ACTION_BAR && menu != null) {
if (menu.getClass().getSimpleName().equals("MenuBuilder")) {
try {
Method m = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE);
m.setAccessible(true);
m.invoke(menu, true);
} catch (Exception e) {
}
}
}
return super.onMenuOpened(featureId, menu);
}
// 由于手机硬件情况的不同,在没有物理Menu键的手机上,ActionBar的overflow按钮会有显示不出
// 来的情况,可以通过反射的方式修改ViewConfiguration类中的sHasPermanentMenuKey静态变量的
// 值永远为false,系统就是根据这个变量值来判断手机有没有物理Menu键
private void setOverflowShowingAlways() {
try {
ViewConfiguration config = ViewConfiguration.get(this);
Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
menuKeyField.setAccessible(true);
menuKeyField.setBoolean(config, false);
} catch (Exception e) {
e.printStackTrace();
}
}
看了许多网上的也是这么写的 为啥我的就不出来下拉菜单 哪错了 求解