在工具栏上显示ActionMode
我正在尝试使用新的android.support.v7.widget.Toolbar
,除了传统的android.app.ActionBar
。 我能够显示它:
toolbar.startActionMode(callback);
问题是ActionMode
显示在ActionBar
,而不是在Toolbar
。 有没有办法改变这个?
我尝试在我的主题中设置以下内容,但似乎没有改变任何内容:
<item name="windowActionModeOverlay">true</item>
由于您使用的是
Toolbar
,我还假设您使用的是AppCompatActivity
并使用setSupportActionBar(toolbar);
将内置的ActionBar
replace为您的自定义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(); }
这个对我有用。