在项目点击Android操作栏,下拉菜单的自定义视图(Android Action bar cust

2019-07-19 21:14发布

我正在写一个平板电脑Android应用程序。 我已经用行动栏创建我的图标。 不过,我需要时点击菜单项,打开自定义视图。

我不想自定义操作栏 - 我需要点击“浏览主题”动作栏项目时,膨胀的自定义视图。 这种观点将需要看起来像一个下拉菜单,但可以用自己的自定义布局,它不会被用于导航。

这是我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将允许被点击的动作栏项目的时候我来实例化一个自定义视图,但我不能制定出一个办法 - 也许我会走上错误的道路。

任何帮助将非常感谢! 谢谢!

更新:感谢您的链接行动的直板造型,但我并不想简单的样式下拉。 我想膨胀的自定义视图。 视图将执行的数据库查询等以及。

Answer 1:

好吧,我摸索出了自己的解决方案。 基本上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];
    }
}


文章来源: Android Action bar custom dropdown view on item click