Android操作栏自定义下拉视图,点击项目

16
我正在为平板电脑编写 Android 应用程序。我选择了操作栏来创建我的图标。然而,当单击菜单项之一时,我需要打开一个自定义视图。
我不想要一个自定义操作栏 - 我需要在单击“浏览主题”操作栏项时填充一个自定义视图。这个视图需要像一个下拉菜单一样显示,但是使用我自己的自定义布局,因为它不会用于导航。

Drop down menu

这是我的menu.xml文件

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/menu_browse"
        android:title="Browse Subjects"
        android:showAsAction="always"
        android:actionLayout="@layout/action_layout_browse"
        android:actionProviderClass="au.com.pearson.f12catalogue.action_providers.BrowseProvider"
            />
    <item android:id="@+id/menu_settings"
        android:title="Settings"
        android:orderInCategory="100"
        android:showAsAction="never" />
</menu>

我原以为ActionProviderClass可以在单击动作栏项时实例化自定义视图,但我找不到方法 - 也许我走错了路。非常感谢任何关于此的帮助!谢谢!
更新: 感谢链接到操作栏样式,但我不想仅仅设计一个下拉菜单。我想填充自定义视图。该视图将执行DB查询等操作。

1
我正在寻找您在此处发布的图像示例,您能否提供任何示例或提示如何创建自定义下拉菜单并动态添加菜单项。 - Naruto
1
界面看起来不错。你完成了这个应用程序吗?可以下载使用吗? - Zen
1个回答

13

好的,我自己想出了一个解决方案。基本上,actionProviderClass 用于在操作栏中实例化 actionView。在这个类中,您可以将 onClick 监听器附加到您所膨胀的视图。我使用此监听器,在单击时将下拉视图膨胀到主框架中。

例如

public class BaseProvider extends ActionProvider {

    protected final Context context;
    protected final int layout;
    protected final BaseProvider self;
    protected View view;
    protected int positionLeft = 0;
    protected Dropdown dropdown;

    public BaseProvider(Context context, int layout, Dropdown dropdown) {
        super(context);
        this.layout = layout;
        this.context = context;
        this.self = this;
        this.dropdown = dropdown;
    }

    @Override
    public View onCreateActionView() {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE );

        View view = inflater.inflate(this.layout, null);

        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                self.onItemClick();
            }
        });
        this.view = view;
        return view;
    }

    public boolean onItemClick(){
        toggleDropdown();
        return true;
    }

    protected void toggleDropdown(){
        this.positionLeft = getRelativeLeft(view);
        DropdownInflater.getInstance().toggleDropdown(this.dropdown,this.positionLeft);
    }

    protected int getRelativeLeft(View view) {
        int[] loc = new int[2];
        view.getLocationOnScreen(loc);
        return loc[0];
    }
}

11
请问您能否提供下拉菜单(Dropdown)类的相关信息?它是基于其他小部件(Widget)还是仅仅是一个列表视图(ListView)?非常感谢。 - jelgh
你是如何在ActionProvider中的项上附加onClick监听器以及在哪里进行的? - lschlessinger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接