gpt4 book ai didi

Android ActionBar ActionProvider 子菜单

转载 作者:太空宇宙 更新时间:2023-11-03 10:21:29 25 4
gpt4 key购买 nike

我只是无法让 ActionProvider 显示子菜单,我不明白为什么。我在 xml 中定义了我的菜单:

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

<item
android:id="@+id/dossier_menu"
android:showAsAction="always"
android:actionProviderClass="com.some.other.mockup.MActionProvider">
</item>
</menu>

Action 提供者类:

public class MActionProvider extends ActionProvider  {

private static final String TAG = "MActionProvider";
private static final int LIST_LENGTH = 3;
private Context context;

/**
* Creates a new instance.
*
* @param context Context for accessing resources.
*/
public MezzActionProvider(Context context) {
super(context);
this.context = context;
}

@Override
public View onCreateActionView() {
View view = View.inflate(context, R.layout.action_layout, null);
//view must be returned not tetxView or just buttonView
return view;
}

@Override
public boolean hasSubMenu() {
Log.d(TAG, "hasSubMenu");
return true;
}


@Override
public boolean onPerformDefaultAction() {
Log.d(TAG, "onPerformDefaultAction");
return super.onPerformDefaultAction();
}

/**add submenu in code**/
@Override
public void onPrepareSubMenu(SubMenu subMenu) {
Log.d(TAG, "onPrepareSubMenu");

subMenu.clear();
subMenu.add(Menu.NONE, Menu.NONE, 1,"Mezz 1");
subMenu.add(Menu.NONE, Menu.NONE, 2, "Mezz 2");

}

}

Action 布局是:

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Mezz State ++"
android:id="@+id/textView"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_margin="4dp"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="@dimen/buttonHeight"
android:src="@android:drawable/ic_menu_add"
android:layout_alignParentLeft="true"
android:id="@+id/img1"
android:layout_below="@id/textView"/>

我尝试使用按钮而不是 ImageView ,甚至尝试将子菜单添加到 xml 中的菜单项,当我单击操作提供程序时它只是不显示任何子菜单我不明白为什么。

谢谢

最佳答案

我在这里找到了答案:

Can't display sub-menu for custom ActionProvider

问题是我的 onCreateActionView() 方法没有返回 null。

感谢 Jason Robinson 的回答是:

@Override
public View onCreateActionView() {
View view = View.inflate(context, R.layout.action_layout, null);

final PopupMenu menu = new PopupMenu(mContext, view);
menu.inflate(R.menu.submenu);
menu.setOnMenuItemClickListener(this);

view.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v){
menu.show();
}
});

return view;
}

submenu.xml 包含:

<?xml version="1.0" encoding="utf-8"?>

<menu xmlns:android="http://schemas.android.com/apk/res/android">

<item
android:id="@+id/mezzSub1"
android:title="Mezz 1"
android:showAsAction="always"></item>
<item
android:id="@+id/mezzSub2"
android:title="Mezz 2"
android:showAsAction="always"></item>

</menu>

关于Android ActionBar ActionProvider 子菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20077959/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com