Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.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 带有AppCompat-v7的工具栏和上下文操作栏_Android_Android 5.0 Lollipop_Android Appcompat_Android Toolbar - Fatal编程技术网

Android 带有AppCompat-v7的工具栏和上下文操作栏

Android 带有AppCompat-v7的工具栏和上下文操作栏,android,android-5.0-lollipop,android-appcompat,android-toolbar,Android,Android 5.0 Lollipop,Android Appcompat,Android Toolbar,我正在使用棒棒糖和AppCompat-v7库中引入的新添加工具栏。在设置工具栏之后,我注意到,当您调用将显示上下文操作栏的内容(例如高亮显示用于复制/粘贴的文本)时,它会将工具栏向下推到页面上。你可以在页面底部的图片中看到我在说什么: 所以,基本上,我是这样设置的。我在一个xml文件中定义了工具栏,该文件与include标记一起使用: <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.c

我正在使用棒棒糖和AppCompat-v7库中引入的新添加工具栏。在设置工具栏之后,我注意到,当您调用将显示上下文操作栏的内容(例如高亮显示用于复制/粘贴的文本)时,它会将工具栏向下推到页面上。你可以在页面底部的图片中看到我在说什么:

所以,基本上,我是这样设置的。我在一个xml文件中定义了工具栏,该文件与include标记一起使用:

<android.support.v7.widget.Toolbar
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="?attr/colorPrimary"/>
有人知道如何使上下文操作栏位于工具栏上方吗

更新: 解决方案:使用属性。在主题中设置以下内容:

<item name="windowActionModeOverlay">true</item>
onDestroyActionMode
中,我再次显示它:

actionBarToolbar.setVisibility(View.VISIBLE);
隐藏/显示发生得太快,在我的测试设备上看不到。当然还有一个缺点:尽管enter动画仍然有效,但是上下文操作栏的exit动画会丢失,因为工具栏会立即弹出到它上面。但是,在我们找到更好的解决方案之前,我想我们必须解决这个问题


(我的活动实际上是扩展一个自定义的
BaseActivity
类,该类有一个名为
getActionBarToolbar()
的方法,该方法取自,因此我可以轻松获取工具栏:

BaseActivity activity = (BaseActivity) getActivity();
activity.getActionBarToolbar().setVisibility(View.GONE);

太糟糕了,I/O应用程序没有使用上下文操作栏。)

不要在活动中启动它,而是在工具栏上启动它。在您的活动中:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.startActionMode(mActionModeCallback)
你必须使用

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

将工具栏置于前面的非常有用的方法
toolbar.bringToFront()
在我的例子中,
true
不起作用, 但是这项工作:
true
android
是关键。

只是一个小小的补充: 对于
true
要工作,在活动中调用
setContentView(R.layout.u活动)
之前调用
super.onCreate(savedInstanceState)
非常重要。
在这种情况下,这真的很重要

另一个小补充:如果您在片段中加载整个ui(
ft.replace(android.R.id.content,fragment)
),请确保通过
setContentView(R.layout.empty\u screen)
在活动中至少设置一个空屏幕.

雅各布的解决方案对我来说很有效,但上下文操作栏是透明的,工具栏可以通过它看到。这可以通过以下方式解决:

<style name="AppTheme.Base" parent="Theme.AppCompat.Light">
    ....
    ....
    <item name="actionModeStyle">@style/CustomActionMode</item>
</style>

<style name="CustomActionMode" parent="@style/Widget.AppCompat.ActionMode">
    <item name="background">@color/primary_material_light</item>
</style>

....
....
@样式/自定义操作模式
@颜色/主要材料\u灯
主题“AppTheme.Base”必须是应用于工具栏的主题

有关上下文操作栏样式的更多详细信息:


您的活动使用的主题是什么?David,我刚刚点击了链接,它似乎对我有效。是的,这也是我唯一能想到的解决方案。但是,在某些情况下,上下文操作栏会从系统中发生(例如在WebView中或使用EditText)。那些你没有收到回电的人。那么,你会如何展示/隐藏它呢?(或者我错了,事实上,你可以用这些来获得出租车的回电)?是的,你可以这样做,就像Aleksandar在他的回答中描述的那样。哦,已经不能再更新我的评论了。小补充:似乎setCustomSelectionActionModeCallback不能与支持库中的ActionModeCallback一起使用。我正在使用VERSION.SDK_INT检查来设置它。仍然需要测试问题是否也发生在预蜂窝设备上。@ariets请查看我的更新答案。我觉得完全忘记了那个属性有点扫兴,但至少我们现在可以摆脱这个变通方法;-)有趣的是,我使用的是最新版本(编译'com.android.support:appcompat-v7:22.0.0'),但我必须省略android:part才能让它工作……对我来说,android.support.v7.app.ActionBarI收到这个错误->视图中的startActionMode(android.view.ActionMode.Callback)不能应用于(android.support.v7.view.ActionMode.Callback)啊,好的。我的最小版本不小于11。所以我可以使用android.view.ActionMode。在android.support.v7.widget.Toolbar上回调,我从未使用过android.support.v7.view.ActionMode.Callback。值得一提的是
appcompativity.startSupportActionMode(回调)
,以便与菜单项xmls中的
app:icontent
等属性兼容。
view.bringToFront()
是一项非常繁重的操作,通常应不惜任何代价避免。您是对的,但对于动画,例如从上到下的屏幕将与工具栏重叠。因此,我们需要使用toolbar.bringToFront()来在工具栏下方设置动画。如果有其他方法可以共享:)您可以在appcompat工具栏上使用
true
,否则您可以使用
android
命名空间。在我的布局中没有用我正在添加工具栏,在activity initialize工具栏和setsupport true done中,请帮助metrue按预期工作!
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.startActionMode(mActionModeCallback)
<item name="windowActionModeOverlay">true</item>
<item name="windowActionModeOverlay">true</item>
<style name="AppTheme.Base" parent="Theme.AppCompat.Light">
    ....
    ....
    <item name="actionModeStyle">@style/CustomActionMode</item>
</style>

<style name="CustomActionMode" parent="@style/Widget.AppCompat.ActionMode">
    <item name="background">@color/primary_material_light</item>
</style>