[英]Android Action bar custom dropdown view on item click
我正在为平板电脑编写一款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允许我在单击操作栏项时实例化自定义视图但我无法解决问题 - 也许我走错了路。
任何帮助将非常感谢! 谢谢!
更新:感谢动作栏样式的链接,但我不想简单地设置下拉样式。 我想夸大自定义视图。 该视图还将执行数据库查询等。
好的,我自己制定了一个解决方案。 基本上,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];
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.