【问题标题】:Android Action bar custom dropdown view on item click项目单击时的Android操作栏自定义下拉视图
【发布时间】:2023-03-25 04:30:01
【问题描述】:

我正在为平板电脑编写一个 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 将允许我在单击操作栏项时实例化自定义视图,但我无法解决 - 也许我走错了路。

对此的任何帮助将不胜感激非常!谢谢!

更新: 感谢您提供指向操作栏样式的链接,但我不想简单地设置下拉样式。我想膨胀一个自定义视图。该视图还将执行数据库查询等。

【问题讨论】:

  • 我正在寻找您在此处发布为图片的示例,您能否提供任何示例示例或提示如何创建自定义下拉菜单并在此处动态添加菜单项。
  • UI 看起来不错。你完成了应用程序吗?可以下载了吗?

标签: android android-actionbar android-3.0-honeycomb


【解决方案1】:

好的,我自己想出了一个解决方案。基本上 actionProviderClass 用于在 actionBar 中实例化一个 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];
    }
}

【讨论】:

  • 如果你能提供你是如何做 Dropdown 类的信息,那就太棒了。它是基于其他一些 Widget 还是只是一个 ListView?
  • 您是如何以及在何处为 ActionProvider 中的项目附加 onClick 侦听器的?
猜你喜欢
  • 1970-01-01
  • 2012-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-28
  • 2012-12-14
  • 1970-01-01
相关资源
最近更新 更多