2013-07-18 171 views

回答

42
  1. 一旦你的時候,你要禁用的操作欄,設置一些標誌執行用戶動作,說disableButtonFlag

  2. 致電invalidateOptionsMenu()。這將觸發onCreateOptionsMenu被調用來重新生成菜單。

  3. 最後根據disableButtonFlag的狀態修改您的onCreateOptionsMenu以禁用所需的按鈕。

    if (disableButtonFlag) { 
        menu.findItem(R.id.your_item).setEnabled(false); 
    } else { 
        menu.findItem(R.id.your_item).setEnabled(true); 
    } 
    

    或者更簡單地說:

    menu.findItem(R.id.your_item).setEnabled(!disableButtonFlag); 
    
+0

但我需要ActionBar,我對應用程序有要求。我需要繼續使用ActionBar,並且當用戶添加一個文件時,我需要禁用添加更多文件(添加文件的按鈕位於ActionBar中)。 – Mediha

+0

哦,禁用按鈕,編輯。我假設刪除操作欄,通常是禁用操作欄似乎意味着一般。 – Slartibartfast

+0

這正是我所做的。謝謝。 – Mediha

0

你可以做這樣的事情:

public boolean onCreateOptionsMenu(Menu menu){ 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.mainmenu, menu); 
    menu.findItem(R.id.your_item).setEnabled(false); 
    return super.onCreateOptionsMenu(menu); 
} 
+0

但它應該在開始時啓用,我需要稍後停用用戶操作後。請閱讀上面的評論。謝謝。 – Mediha

+0

只需在您的活動中創建一個'Menu'屬性並在'onCreateOptionsMenu'中初始化它。 – Brtle

+0

我找到了如何調用invalidateOptionsMenu的方式,但基本上是這樣的。謝謝。 – Mediha

3

對於Android開發誰使用自定義ActionBar即(保存&取消操作按鈕),我曾嘗試下面的代碼來禁用取消操作按鈕如下:

Java代碼:

LayoutInflater inflater = (LayoutInflater) this 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View actionBarButtons = inflater.inflate(
       R.layout.edit_event_custom_actionbar, new LinearLayout(this), 
       false); 

     View cancelActionView = actionBarButtons 
       .findViewById(R.id.action_cancel); 
     cancelActionView.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 

      } 
     }); 
     cancelActionView.setEnabled(false); 

     View doneActionView = actionBarButtons.findViewById(R.id.action_done); 
     doneActionView.setOnClickListener(new OnClickListener() { 

      @SuppressLint("NewApi") 
      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 

      } 
     }); 
     getActionBar().setDisplayShowHomeEnabled(false); 
     getActionBar().setDisplayShowTitleEnabled(false); 
     getActionBar().setDisplayShowCustomEnabled(true); 
     this.getActionBar().setCustomView(actionBarButtons); 

edit_event_custom_actionbar.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:divider="?attr/dividerVertical" 
    android:dividerPadding="12dp" 
    android:orientation="horizontal" 
    android:showDividers="middle" > 

    <!-- id must match corresponding menu item id --> 
<TextView 
    android:id="@+id/action_cancel" 
    style="@style/EditEventCustomActionButton" 
    android:text="@string/cancel_label" 
    android:drawableLeft="@drawable/ic_action_cancel" android:padding="5dp" /> 

    <!-- id must match corresponding menu item id --> 
<TextView 
    android:id="@+id/action_done" 
    style="@style/EditEventCustomActionButton" 
    android:text="@string/abc_action_mode_done" 
    android:drawableLeft="@drawable/abc_ic_cab_done_holo_dark" android:paddingRight="5dp" /> 

</LinearLayout> 

而這種代碼添加到您的/values/styles.xml:

<style name="EditEventCustomActionButton" parent="android:style/Widget.Holo.Light.ActionButton"> 
    <item name="android:layout_height">match_parent</item> 
    <item name="android:layout_width">0dp</item> 
    <item name="android:layout_weight">1</item> 
    <item name="android:focusable">true</item> 
    <item name="android:textColor">#FFFFFF</item> 
</style> 
0

的簡單方法在操作禁用按鈕酒吧是保存對onCreateOptionsMenu()菜單的引用:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.menu, menu);  
    mMenu = menu; // Save reference 
    return super.onCreateOptionsMenu(menu); 
} 

,然後調用setEnabled()上的菜單項來啓用或禁用:

mMenu.findItem(R.id.my_action_item).setEnabled(false); 

無需通過調用invalidateOptionsMenu()重新創建菜單。