在工具栏上显示ActionMode

我正在尝试使用新的android.support.v7.widget.Toolbar ,除了传统的android.app.ActionBar 。 我能够显示它:

 toolbar.startActionMode(callback); 

问题是ActionMode显示在ActionBar ,而不是在Toolbar 。 有没有办法改变这个?

我尝试在我的主题中设置以下内容,但似乎没有改变任何内容:

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

由于您使用的是Toolbar ,我还假设您使用的是AppCompatActivity并使用setSupportActionBar(toolbar);将内置的ActionBarreplace为您的自定义Toolbar setSupportActionBar(toolbar);

首先确保你正在导入正确的名称空间。

 import android.support.v7.view.ActionMode; 

并不是

 import android.view.ActionMode; 

然后使用

 _actionMode = startSupportActionMode(this); 

并不是

 _actionMode = startActionMode(this); 

不要从你的活动开始,而要在你的工具栏上开始。 在你的活动中:

 Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); toolbar.startActionMode(mActionModeCallback) 

你必须使用

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

在你的主题,由安德烈陈述。

试试这个在你的主题:

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

这是我所做的解决scheme。

ActionMode.Callback的 onCreateActionMode方法中,我添加了这个:

 StandaloneActionMode standaloneActionMode = (StandaloneActionMode) actionMode; Field mContextView; try { mContextView = StandaloneActionMode.class.getDeclaredField("mContextView"); mContextView.setAccessible(true); View contextView = (View) mContextView.get(standaloneActionMode); MarginLayoutParams params = (MarginLayoutParams) contextView.getLayoutParams(); params.topMargin = mToolbar.getTop(); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } 

这个对我有用。