2013-07-18 114 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()重新创建菜单。