16

Возможно ли, как скрыть тост после длительного нажатия на элемент ActionBar? Я не настраивал заголовок для предмета, но он все еще там - пустой тост.Скрытие тоста для длительного нажатия на действиеBar item

<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

Что твоя проблема? Используйте 'Toast.cancel()', если вы хотите отклонить сообщение Toast. – ozbek

+6

Он говорит о тосте, который появляется автоматически, когда вы долго нажимаете элемент на ActionBar. Это то, что делает ActionBar, это не часть его кода. – Karakuri

+0

Но я имею в виду тост, когда вы долго нажимаете элемент ActionBar. Я знаю, что вы можете отменить обычный тост, это не моя проблема. – AdaMoOo

ответ

6

Единственный способ скрыть тост, когда вы установите пункт ActionBar меню, которое будет отображаться с текстом. android:showAsAction="withText". В противном случае тост добавляет уточнение того, что представляет собой каждый элемент действия, даже если для элемента меню нет названия.

+0

У вас есть представление о том, как текст может быть добавлен в тост, если вы хотите – Prateek

+0

Вы хотите добавить тост, показывая пункт меню с текстом? – hardartcore

+0

Я хочу добавить текст в тост, который отображается при длинном нажатии – Prateek

0

Вы пытались создать собственный заказ ActionBar. Вот урок о том, как это сделать: Custom Action Bar

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. До вас взять это отсюда. Вместо этого вы хотите пересмотреть и соблюдать рекомендации.

+0

Эй, @MH ... Мое требование просто напротив. Я хочу добавить тост в свой элемент макета. Как достичь этого. –

+0

@MahendraChhimwal: Я думаю, вы могли бы просто показать тост в нажатом на кнопку действия. Тосты могут быть полностью настроены и отображаться в любом месте экрана, поэтому вы сможете просто реплицировать по умолчанию тосты (подсказка: просто взять пик в исходном коде фреймворка). –

+0

: Спасибо за предложение и да (подсказка: просто возьмите пик в исходном коде фреймворка) - это отличный совет (и подсказка) для разработчиков новичка, таких как я. Спасибо снова. –

5

Вы можете изменить onLongClick в ActionMenuItemView Класс прекратить Тосты на длинном клике.
, но будьте осторожны, он работает только на устройствах с API менее 11, потому что библиотека sherlockactionbar проверяет уровень API вашего устройства на Build.VERSION.SDK_INT, и если у вас есть более новое устройство, оно просто использует стандартную панель действий по умолчанию, которую вы не изменяете.

0

смотрите this вопрос, я уверен, вы хотите этого достичь.

-2

Существует способ, если вы используете ActionBarSherlock. Найдите файл ActionMenuItemView.java в библиотеке и просто прокомментируйте весь метод onLongClick.

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> 

и меню кода инфлятора выглядит следующим образом:

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); 
    } 
+0

Можно ли получить тост за просмотр действия? –

2

В 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; 
        } 
       }); 
      } 
     } 
    }); 
} 
2

Это, как я это сделал:

@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: Лично я предпочитаю поведение по умолчанию, но это был мой случай: я отключил справа налево поддержку моего заявления и после этого, когда я установил локаль по умолчанию для РТЛ языка, тосты отображались в неправильная сторона! Честно говоря, я торопился и не узнал причину, но я буду признателен, если кто-нибудь сообщит мне, почему, во всяком случае, так я прошел.

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; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^