Android 在actionBar项目上长按时隐藏烤面包片
在长时间按下ActionBar项后,是否有可能隐藏烤面包片?我没有为该项目设置标题,但它仍然存在-空吐司Android 在actionBar项目上长按时隐藏烤面包片,android,actionbarsherlock,android-actionbar,toast,long-press,Android,Actionbarsherlock,Android Actionbar,Toast,Long Press,在长时间按下ActionBar项后,是否有可能隐藏烤面包片?我没有为该项目设置标题,但它仍然存在-空吐司 <item android:id="@+id/ab_main_menu_dots" android:icon="@drawable/action_icons_dots" android:showAsAction="always"> <menu> <item android:id="@+id/
<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>
隐藏吐司的唯一方法是将
操作栏
菜单项设置为显示文本<代码>android:showAsAction=“withText”。否则,即使菜单项没有设置标题,toast也会增加对每个操作项所代表内容的说明。您可以尝试创建自己的自定义操作栏。以下是有关如何执行此操作的教程:
最简洁的方法可能是为菜单项指定一个自定义动作视图,该视图模仿常规菜单项的外观
既然您提到您正在使用ActionBarSherlock,下面是一个简单的示例
想象一下下面的menu.xml,它在活动中膨胀
<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\u主菜单\u dots\u 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" />
结果是一个看起来像溢出按钮的菜单项,当您长按它时,无论是使用本机ActionBar还是ABS,都不会显示Toast
消息。由你来决定从这里开始。您需要重新考虑并遵守指导原则。您可以在课堂上修改onlong click
,以停止长时间单击时的烘烤。
但要小心,它只在API小于11的设备上工作,因为sherlockactionbar库通过Build.VERSION.SDK_INT
检查您的设备API级别,如果您有较新的设备,它只使用默认的系统actionbar,您不需要修改它 如果您使用ActionBarSherlock,有一种方法。在库中找到ActionMenuItemView.java文件,只需对整个onLongClick方法进行注释。您可以使用自定义操作视图实现此目的,如下所示:
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>
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);
}
在oncreateoptions菜单中
将任务安排为禁用在所需菜单项上长按。这是样品
@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>
注意:不要忘记设置样式,Widget.AppCompat.Toolbar.Button.Navigation
使IamgeButton
正确显示在工具栏中
p.S:就个人而言,我更喜欢默认行为,但这是我的情况:
我禁用了对我的应用程序从右到左的支持,之后当我将默认语言环境设置为rtl语言时,toast出现在错误的一侧!老实说,我当时很匆忙,没有找到原因,但如果有人告诉我原因,我将不胜感激。无论如何,这就是我的经历。对我来说,解决方案是使用:
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;
}
他说的是当你长按ActionBar上的一个项目时自动弹出的祝酒词。这是ActionBar所做的,它不是他的代码的一部分。但我的意思是,当你长按ActionBar项时,敬酒。我知道你可以取消普通的吐司,这不是我的问题。这是本机操作栏的一个功能。它不能被删除。@AdaMoOo不要忘记准则。如果你这样做,它将违反操作栏设计指南更好的解决方法是:不解决,给项目命名,让Android处理项目,在某些设备中,它们可以显示为溢出,并且标题标签确实有助于用户进行操作。您好,如果想在toast中添加文字,您知道如何将文字添加到toast中吗?我想在toast中添加一些长按显示的文字不起作用。您正在谈论将其添加到toast消息中,该消息在长按后显示按下菜单项是您使用android:text=”“
设置的文本。如果你想显示另一个与此不同的文本,据我所知,我认为这根本不可能。嘿,这不是文本,而是标题android:title=“”
,有可能让祝酒词显示动作视图吗?嘿@MH。。。我的要求正好相反。我想在我的自定义动作布局项上烤面包。如何做到这一点。@Mahendrachimwal:我想你可以在动作项的长时间点击中举杯庆祝。toast可以完全定制并显示在屏幕上的任何位置,因此您应该能够复制默认的toast行为(提示:只需在框架的源代码中取一个峰值)。:感谢您的建议,是的(提示:只需在框架的源代码中取一个峰值)是一个很好的提示(&tip)对于像我这样的新手开发者。再次感谢。这是肮脏的,它在工作,它在肮脏的工作!谢谢你的提示!
@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;
}