如何在 Android 中完全禁用上下文操作栏?

Posted

技术标签:

【中文标题】如何在 Android 中完全禁用上下文操作栏?【英文标题】:How to completely disable contextual action bar in Android? 【发布时间】:2020-10-07 17:42:57 【问题描述】:

没有任何工具栏,但在 api v23 以下的文本选择时显示上下文操作栏,以下代码无法禁用/删除。如何完全禁用/删除?

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_read_book);

    getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
    getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN);
    getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION 
                    | View.SYSTEM_UI_FLAG_IMMERSIVE);
    getWindow().getDecorView().setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_IMMERSIVE  | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION  | View.SYSTEM_UI_FLAG_FULLSCREEN);

    if (getSupportActionBar() != null) 
        getSupportActionBar().setHomeButtonEnabled(false);
        getSupportActionBar().setDisplayHomeAsUpEnabled(false);
        getSupportActionBar().setDisplayShowHomeEnabled(false);
        getSupportActionBar().setDefaultDisplayHomeAsUpEnabled(false);
        getSupportActionBar().setDisplayShowCustomEnabled(false);
        getSupportActionBar().setDisplayShowTitleEnabled(false);
        getSupportActionBar().setHomeButtonEnabled(false);
        getSupportActionBar().removeAllTabs();
        getSupportActionBar().setShowHideAnimationEnabled(false);
        getSupportActionBar().hide();
        getSupportActionBar().collapseActionView();
        getSupportActionBar().closeOptionsMenu();
        getSupportActionBar().setHomeAsUpIndicator(null);
    

我的应用主题:

<style name="MyAppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
    ...
    <item name="windowActionBar">false</item>
    ...
</style>

编辑:

使用CustomSelectionActionModeCallback长按我的TextView时打开一个特殊的菜单片段,并且我必须将onCreateActionMode方法返回true,因为为了避免在选择过程中取消选择,这样(返回true)可以防止事件下降但操作栏正在打开 api 级别 23 及以下。

mTextViewItem.setCustomSelectionActionModeCallback(new ActionMode.Callback() 
    @Override
    public boolean onCreateActionMode(ActionMode mode, Menu menu) 
        ...
        showMyMenuFragment();
        ...
        return true;
    
    
    @Override
    public boolean onPrepareActionMode(ActionMode mode, Menu menu) 
        menu.clear();
        return false;
    
    
    @Override
    public boolean onActionItemClicked(ActionMode mode, MenuItem item) 
        return false;
    
    
    @Override
    public void onDestroyActionMode(ActionMode mode) 
    
    
);

【问题讨论】:

您是否尝试过使用没有操作栏的主题的其他工具栏? 我都试过了,目前是@style/AppTheme.NoActionBar。 你试过***.com/questions/14629641/…吗? @ATES 你的 Activity 扩展了 AppCompatActivity 还是 Activity? @ATES 如果你的activity扩展了Activty,那么你需要做getActionBar().hide(); 【参考方案1】:

使用.NoActionBar 主题之一并将windowActionBar 属性设置为false

从 API 级别 21 开始,操作栏可以用应用程序布局中的任何工具栏小部件来表示。应用程序可以选择使用 setSupportActionBar() 方法将 Toolbar 指定为 Activity 的操作栏。

【讨论】:

感谢回复,已编辑问题以获取更多详细信息。

以上是关于如何在 Android 中完全禁用上下文操作栏?的主要内容,如果未能解决你的问题,请参考以下文章

禁用上下文操作栏并长按复制/粘贴

WindowChrome - 如何修改或禁用标题栏中的上下文菜单?

在android模拟器中禁用menubutton

禁用操作栏中的折叠按钮 - Android

在 Android 上长按时禁用上下文菜单

在 Android 上禁用标注(上下文菜单)