长按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>
答案 0 :(得分:6)
隐藏toast的唯一方法是将ActionBar
菜单项设置为显示文本。 android:showAsAction="withText"
。否则,即使没有为菜单项设置标题,吐司也会添加每个操作项表示的内容。
答案 1 :(得分:5)
您可以修改ActionMenuItemView课程中的onLongClick
,以便在长按时停止敬酒
但请注意,它仅适用于API小于11的设备,因为sherlockactionbar库通过Build.VERSION.SDK_INT
检查您的设备API级别,如果您有更新的设备,它只使用您未修改的默认系统操作栏。
答案 2 :(得分:4)
可能最简洁的方法是为菜单项指定一个自定义操作视图,模仿常规操作的外观。
既然你提到你正在使用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 来模仿溢出按钮,如下所示:
<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" />
结果是一个看起来像溢出按钮的菜单项,并且当您长按它时不会显示Toast
消息,无论是使用本机ActionBar还是ABS。由你决定从这里拿走它。您想重新考虑并遵守指南。
答案 3 :(得分:4)
在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;
}
});
}
}
});
}
答案 4 :(得分:3)
我就这样做了:
@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
在工具栏中正确显示。
P.S:我个人更喜欢默认行为,但这是我的情况: 我禁用了对我的应用程序的右到左支持,之后当我将默认语言环境设置为 rtl 语言时,toast出现在错误的一侧!老实说,我很着急,并没有找到原因,但如果有人让我知道原因,我会感激,无论如何,这就是我通过的方式。
答案 5 :(得分:1)
您可以使用自定义操作视图执行此操作,如下所示:
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);
}
答案 6 :(得分:0)
您可以尝试创建自己的自定义ActionBar
。这是一个如何做到这一点的教程:
Custom Action Bar
答案 7 :(得分:0)
对我来说,解决方案是使用:
android.support.v4.view.MenuItemCompat
所以不要从XML中膨胀菜单:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.refresh_menu, menu);
return true;
}
我使用MenuItemCompat以编程方式创建了项目:
@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;
}
答案 8 :(得分:-2)
如果你正在使用ActionBarSherlock,有一种方法。在库中找到ActionMenuItemView.java文件,只需注释整个onLongClick方法。