无法以任何方式在工具栏顶部显示actionMode

时间:2017-01-12 00:52:29

标签: android android-actionbar android-actionmode

目前,操作模式工具栏显示在工具栏上方,向下移动整个布局,我希望它显示在当前工具栏的顶部。我在this postthis one中尝试了所有解决方案:

  • 我尝试使用带有和不带windowActionModeOverlay前缀的android:,但没有成功
  • 我尝试了view.ActionModesupport.v7.view.ActionMode,但没有成功
  • 我尝试在我的工具栏和我的活动上使用startActionMode,但都没有工作。
  • setContentView之前调用
  • super.onCreate,这不是问题

现在我只是手动设置工具栏可见性,看起来很糟糕。我也在super.onCreate之前设置了活动主题,这可能是问题吗?如果不是这样的话?如何使属性有效?

我的活动:

import android.support.v7.view.ActionMode;
import android.support.v7.widget.Toolbar;
// import ...

public class FileExplorerActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        setTheme(R.style.Theme_NoActionBar);
        super.onCreate(savedInstanceState);

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        // ...
    }

    private void setActionMode(boolean enabled) {
        if (enabled) {
            actionMode = startSupportActionMode(new ActionMode.Callback() {
                @Override
                public boolean onCreateActionMode(ActionMode mode, Menu menu) {
                    MenuInflater inflater = mode.getMenuInflater();
                    inflater.inflate(R.menu.cab, menu);
                    return true;
                }

                @Override
                public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
                    // ... change icons color for theme
                    return false;
                }

                @Override
                public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
                    // ... handle item clicks
                    return true;
                }

                @Override
                public void onDestroyActionMode(ActionMode mode) {}
            });
        } else {
            actionMode.finish();
        }
    }

}

我的主题:

<style name="Theme.NoActionBar" parent="Theme.AppCompat.NoActionBar">
    <item name="android:actionModeBackground">?attr/colorPrimary</item>
    <item name="android:actionModeSplitBackground">@null</item>
    <item name="android:windowActionModeOverlay">true</item>
    <item name="windowActionModeOverlay">true</item>
</style>

1 个答案:

答案 0 :(得分:1)

我尝试了所有组合,发现您使用 values-v21 文件夹来定义棒棒糖及以上设备的样式,而您忘记在styles.xml中添加<item name="windowActionModeOverlay">true</item> values-v21 文件夹。

为了确保您遵循正确的路径,我刚刚在Github上发布了一个示例项目,展示了如何在自定义工具栏的顶部显示ActionBar。

您也可以下载示例APK并尝试使用。

回答您在问题中发布的所有问题

  

我尝试使用带有和不带android:前缀的windowActionModeOverlay,没有成功

您不必使用Android前缀。 windowActionModeOverlay有效。

<item name="windowActionModeOverlay">true</item>
  

我尝试了view.ActionMode和support.v7.view.ActionMode,没有成功

这是必需的,因为您尝试使用支持lib,它具有单独的Action Bar命名空间import android.support.v7.view.ActionMode;

  

我尝试在我的工具栏和我的活动上使用startActionMode,但都没有工作。

它在两个方面都有效。如果你想看一个例子,你可以在github repo中看到它。

  

在super.onCreate之前调用setContentView,这不是问题

这不是问题。它会起作用。