Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.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中的操作栏按钮_Android_Android Actionbar - Fatal编程技术网

禁用Android中的操作栏按钮

禁用Android中的操作栏按钮,android,android-actionbar,Android,Android Actionbar,是否可以在Android中禁用操作栏中的按钮?我四处寻找,找不到任何代码片段,我想应该有一些简单的方法。您可以这样做: public boolean onCreateOptionsMenu(Menu menu){ MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.mainmenu, menu); menu.findItem(R.id.your_item).setEnabled(false)

是否可以在Android中禁用操作栏中的按钮?我四处寻找,找不到任何代码片段,我想应该有一些简单的方法。

您可以这样做:

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);
}
  • 当您要禁用操作栏时执行用户操作后,设置一些标志,例如
    disableButtonFlag

  • 调用
    invalidateOptions菜单()
    。这将触发
    onCreateOptions菜单
    被调用以重新生成菜单

  • 最后,根据
    disableButtonFlag
    的状态,修改
    oncreateoptions菜单以禁用所需的按钮

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

  • 对于使用自定义
    操作栏(即保存和取消操作按钮)的Android开发人员,我尝试了以下代码来禁用取消操作按钮,如下所示:

    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);
    
    <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>
    
    编辑\u事件\u自定义\u 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:

    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);
    
    <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>
    
    
    匹配父项
    0dp
    1.
    真的
    #FFFFFF
    
    禁用操作栏中按钮的一个简单方法是在
    onCreateOptions菜单()中保存对菜单的引用。

    然后调用菜单项上的
    setEnabled()
    ,以启用或禁用:

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

    无需通过调用
    invalidateOptions菜单()重新创建菜单

    如果要在点击按钮时禁用该按钮,只需执行以下操作即可:

    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        item.isEnabled = false
    }
    

    但我需要ActionBar,我对应用程序有要求。我需要继续使用ActionBar,当用户添加一个文件时,我需要禁用添加更多文件(用于添加文件的按钮位于ActionBar中)。哦,禁用按钮,已编辑。我假设删除操作栏,通常禁用操作栏似乎意味着什么。这正是我所做的。谢谢。我怎样才能从我的片段/活动超级类中做到这一点?我有一个侧边导航菜单,用于交换活动中的内容片段。当侧菜单打开时,我想禁用所有的actionbar按钮。使用上述方法,我必须在每个内容片段类中执行此操作。有没有一种方法可以更一般地从父片段类执行此操作?但它应该在开始时启用,我需要在用户操作之后禁用。请阅读上面的评论。谢谢。只需在活动中创建一个
    菜单
    属性,并在
    onCreateOptions菜单
    中初始化它。我找到了调用InvalidateOptions菜单的方法,但基本上就是这样。非常感谢。