长时间按住actionBar项目隐藏Toast

长时间按下ActionBar项目后,如何隐藏烤面包是否有可能? 我没有设置该项目的标题,但它仍然在那里 – 空吐司。

<item android:id="@+id/ab_main_menu_dots" android:icon="@drawable/action_icons_dots" android:showAsAction="always"> <menu> <item android:id="@+id/ab_main_menu_my_profile" android:showAsAction="never" android:title="@string/ab_my_profile"> </item> <item android:id="@+id/ab_main_menu_settings" android:showAsAction="never" android:title="@string/menu_settings"> </item> <item android:id="@+id/ab_main_menu_help" android:showAsAction="never" android:title="@string/tv_help_login"> </item> <item android:id="@+id/ab_main_menu_about_us" android:showAsAction="never" android:title="@string/ab_about_us"> </item> <item android:id="@+id/ab_main_menu_logout" android:showAsAction="never" android:title="@string/bt_logout_main"> </item> </menu> </item> 

Solutions Collecting From Web of "长时间按住actionBar项目隐藏Toast"

当您设置要显示的文本的ActionBar菜单项时,隐藏烤面包的唯一方法是。 android:showAsAction="withText" 。 否则,即使没有为菜单项目设置标题,敬酒也会增加每个操作项目所代表的内容。

您可以修改ActionMenuItemView类中的onLongClick,以便长时间停止烘烤。
但要小心,它只适用于API小于11的设备,因为sherlockactionbar库通过Build.VERSION.SDK_INT检查你的设备API级别,如果你有更新的设备,它只是使用默认的系统操作栏,你没有修改。

可能最干净的方法是将自定义操作视图分配给菜单项,以模仿常规菜单项的外观。

既然你提到你使用了ActionBarSherlock,下面是一个简单的例子。

想象下面的menu.xml ,它在Activity被夸大了。

 <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/ab_main_menu_dots" android:actionLayout="@layout/ab_main_menu_dots_layout" android:showAsAction="always"/> </menu> 

您可以定义ab_main_menu_dots_layout.xml以模拟溢出button,如下所示:

 <ImageButton xmlns:android="http://schemas.android.com/apk/res/android" style="@style/Widget.Sherlock.ActionButton.Overflow" android:layout_width="match_parent" android:layout_height="match_parent" /> 

结果是一个看起来像溢出button的菜单项,不pipe是使用本机ActionBar还是ABS,在长按button时都不会显示Toast消息。 由你自取。 你想重新考虑并遵守指导方针。

onCreateOptionsMenu安排一个任务来禁用 长期点击所需的菜单项。 这是示例

  @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.my_menu, menu); new Handler().post(new Runnable() { @Override public void run() { final View v = getActivity().findViewById(R.id.your_menu_item); if (v != null) { v.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { return false; } }); } } }); } 

这是我做到的:

 @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); MenuItem item = menu.findItem(R.id.no_toast); item.setActionView(R.layout.custom_view); item.getActionView().setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //handle click (just this item) } }); return true; } 

这是我的菜单:

 <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:title="Never gonna see me in a toast!" app:showAsAction="always" android:id="@+id/no_toast" /> </menu> 

我的自定义视图只是一个ImageButton

 <?xml version="1.0" encoding="utf-8"?> <ImageButton xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" style="@style/Widget.AppCompat.Toolbar.Button.Navigation" android:layout_width="match_parent" android:layout_height="match_parent" android:src="@drawable/icon" /> 

注意:不要忘记设置样式, Widget.AppCompat.Toolbar.Button.Navigation使IamgeButton在工具栏中正确显示。

PS:我个人更喜欢默认的行为,但这是我的情况:我禁用从右到左支持我的应用程序,然后当我设置默认语言环境为RTL语言,敬酒显示在错误的一面! 老实说,我很着急,没有find原因,但如果有人让我知道为什么,我会感激,无论如何,这是我通过的方式。

您可以通过使用自定义操作视图来实现此目的:

 action_menu.xml <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:support="http://schemas.android.com/apk/res-auto" > <item android:id="@+id/item1" support:showAsAction="always"> </item> </menu> custom_action_view.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_margin="10dp" android:paddingRight="5dp" > <ImageButton android:id="@+id/customActionItem" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:background="@drawable/abc_item_background_holo_dark" android:src="@drawable/bulb_icon" /> </RelativeLayout> 

和菜单inflater代码如下:

  public boolean onCreateOptionsMenu(Menu menu) { // TODO Auto-generated method stub MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.action_menu, menu); final MenuItem item1= menu.findItem(R.id.item1); MenuItemCompat.setActionView(item1, R.layout.custom_action_view); View vItem1= MenuItemCompat.getActionView(item1); final ImageButton customActionItem= (ImageButton) vItem1.findViewById(R.id.customActionItem); customActionItem.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub // do something here } }); return super.onCreateOptionsMenu(menu); } 

您可以尝试创build自己的自定义ActionBar 。 这里是一个关于如何做到的教程: 自定义操作栏

看看这个问题,我很确定你想达到那个目的。

对我来说,解决scheme是使用:

 android.support.v4.view.MenuItemCompat 

所以,而不是从XML中的菜单充气:

 @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.refresh_menu, menu); return true; } 

我使用MenuItemCompat以编程方式创build了这些项目:

 @Override public boolean onCreateOptionsMenu(Menu menu) { MenuItem refreshItem = menu.add(Menu.NONE, R.id.menu_item_refresh, Menu.NONE, R.string.general_pop_up_dialog_btn_cancel); MenuItemCompat.setActionView(refreshItem, R.layout.actionbar_custom_view_refresh); MenuItemCompat.setShowAsAction(refreshItem, MenuItemCompat.SHOW_AS_ACTION_ALWAYS); return true; } 

有一种方法,如果你使用ActionBarSherlock。 在库中findActionMenuItemView.java文件,只是在onClick方法上评论整个。