我打算在我的应用程序中使用快速操作UI模式。 Android Quick Actions UI Pattern。快速操作窗口需要一个枢轴视图来坚持。Android:获取视图参考菜单项
quickAction.show(View pivotView);
我打算使用菜单项的快速操作,我可以访问被点击的项目。 但问题是我需要从菜单项引用视图,以便我可以将它传递给快速操作。
我如何获得对所选menuItem中的视图的引用。
我打算在我的应用程序中使用快速操作UI模式。 Android Quick Actions UI Pattern。快速操作窗口需要一个枢轴视图来坚持。Android:获取视图参考菜单项
quickAction.show(View pivotView);
我打算使用菜单项的快速操作,我可以访问被点击的项目。 但问题是我需要从菜单项引用视图,以便我可以将它传递给快速操作。
我如何获得对所选menuItem中的视图的引用。
您可以通过在xml中为您的菜单项提供一个actionViewClass属性来实现此目的,然后您将能够获得需要的透视视图。该代码会是这样的
<item
android:id="@+id/menu_find"
android:showAsAction="ifRoom"
android:actionViewClass="android.widget.ImageButton"
/>
在你OnCreateOptionsMenu为此
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
getMenuInflater().inflate(R.menu.menu_search, menu);
locButton = (ImageButton) menu.findItem(R.id.menu_find).getActionView();
locButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
createPopup();
mQuickAction.show(v);
}
});
return true;
}
老问题,但我跑进与actionViewClass
属性的一些问题。对于后来遇到此问题的人...
调用findViewById(R.id.mnu_item)
在onOptionsItemSelected
将返回一个View
定位点。
QuickActions
对MenuItems
不是很好的设计,但我发现它们是用自定义背景实现子菜单的最简单方法。
任何想要查找其他原因(如我想要的)的菜单视图项目的更新。
如果您有权访问和使用AppCompat的工具栏,则有一种方法。这不是最有效的方式,但它是我发现访问菜单项视图的最简单方法。
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
Toolbar toolbar = (Toolbar) view.findViewById(R.id.toolbar);
// Find Menu
for (int toolbarChildIndex = 0; toolbarChildIndex < toolbar.getChildCount(); toolbarChildIndex++) {
View view = toolbar.getChildAt(toolbarChildIndex);
// Found Menu
if (view instanceof ActionMenuView) {
ActionMenuView menuView = (ActionMenuView) view;
// All menu items
for (int menuChildIndex = 0; menuChildIndex < menuView.getChildCount(); menuChildIndex++) {
ActionMenuItemView itemView = (ActionMenuItemView) menuView.getChildAt(menuChildIndex);
// Do something to itemView...
}
}
}
}
在主要活动类中,最好重写onOptionsItemSelected(...)方法;应该是如下:
public boolean onOptionsItemSelected(MenuItem item) {
// the id is of type int
int someId = item.getItemId();
// can use an if() or switch() statement to check if id is selected
//a Toast message can be used to show item is selected
}
中序到得到的菜单项的参考意见,我们需要这样做,
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.section, menu);
new Handler().post(new Runnable() {
@Override
public void run() {
final View menuItemView = findViewById(R.id.action_preview);
// SOME OF YOUR TASK AFTER GETTING VIEW REFERENCE
}
});
return true;
}
你可以参考菜单项是这样的:
MenuItem btnFavorites = menu.findItem(R.id.action_favorite);
然后做任何你想要的。例如。改变它的图标是这样的:
btnFavorites.setIcon(R.drawable.ic_favorite_false);
的onOptionsItemSelected里面只是简单地通过使用ID获取视图。
查看menuItemView = findViewById(R.id。action_sort);
现在您可以根据您的需求使用此视图。
http://www.londatiga.net/it/how-to-create-quickaction-dialog-in-android/你有没有使用过这个链接.. – 2011-12-23 09:34:35
@NikhilreddyGujjula链接不工作。 – 2011-12-23 09:40:25
回复我已经试过它已经为我工作,但我没有代码为我的sry .. – 2011-12-23 09:45:53