16

如何隱藏長按ActionBar項目之後的吐司怎麼可能?我沒有爲該物品設置標題,但它仍然存在 - 空吐司。長時間按動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

什麼你的問題?如果您想關閉Toast消息,請使用'Toast.cancel()'。 – 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:我想你可以在(長)點擊動作項目中顯示吐司。 Toasts可以完全定製並顯示在屏幕上的任何位置,因此您應該能夠複製默認的Toast行爲(提示:只需在框架的源代碼中找到一個峯值)。 –

+0

:感謝您的建議,是的(提示:只是在框架的源代碼中取得一個高峯)對於像我這樣的新手開發者來說是一個很好的提示(也是提示)。再次感謝。 –

5

您可以修改onLongClickActionMenuItemView類以停止長時間烘烤。
但要小心,它只適用於API小於11的設備,因爲sherlockactionbar庫檢查你的設備API級別Build.VERSION.SDK_INT,如果你有更新的設備,它只是使用默認的系統操作欄,你沒有修改。

0

看看this問題,我很確定你想達到那個目的。

-2

有一種方法,如果你使用的是ActionBarSherlock。在庫中找到ActionMenuItemView.java文件,並對整個onClick方法進行評論。

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:我個人更喜歡默認行爲,但是這是我的情況: 我爲我的應用程序後,當我默認區域設置爲RTL語言左支持殘疾人的權利,土司在顯示出來錯誤的一面!老實說,我很着急,沒有找出原因,但如果有人讓我知道原因,我會感激,無論如何,這是我通過的方式。

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