Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在actionBar项目上长按时隐藏烤面包片_Android_Actionbarsherlock_Android Actionbar_Toast_Long Press - Fatal编程技术网

Android 在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/

在长时间按下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>



隐藏吐司的唯一方法是将
操作栏
菜单项设置为显示文本<代码>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;
}