无法以任何方式在工具栏顶部显示 actionMode
Can't show actionMode on top of Toolbar in any way
目前动作模式工具栏显示在工具栏上方,将整个布局向下移动,我希望它显示在我当前工具栏的顶部。我尝试了 this post and this one:
中的所有解决方案
- 我尝试使用
windowActionModeOverlay
带和不带 android:
前缀,但没有成功
- 我试了
view.ActionMode
和 support.v7.view.ActionMode
,都没有成功
- 我尝试在我的工具栏和 activity 上使用 startActionMode,但都没有用。
setContentView
在super.onCreate
之前被调用了,这不是问题
现在我只是手动设置工具栏可见性,这看起来很糟糕。另外我在super.onCreate
之前设置了activity主题,会不会是问题所在?如果不是,那是什么?我怎样才能使属性起作用?
我的activity:
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>
我已经尝试了所有组合,发现您正在使用 values-v21 文件夹来定义棒棒糖及以上设备的样式,而您忘记添加 <item name="windowActionModeOverlay">true</item>
在 styles.xml 中 values-v21 文件夹中。
为了确保您遵循正确的路径,我刚刚在 Github 上发布了一个示例项目,展示了如何在自定义工具栏的顶部显示 ActionBar。
您也可以下载示例 APK 并尝试一下。
回答您在问题中发布的所有问题
I tried using windowActionModeOverlay with and without android: prefix, no success
您不必使用 android 前缀。 windowActionModeOverlay 有效。
<item name="windowActionModeOverlay">true</item>
I tried both view.ActionMode and support.v7.view.ActionMode, no success
这是必需的,因为您正在尝试使用具有单独操作栏命名空间的支持库 import android.support.v7.view.ActionMode;
I tried using startActionMode both on my toolbar and my activity, neither worked.
这两种方式都有效。如果你想看例子,你可以在 github 仓库中看到它。
setContentView is called before super.onCreate, this is not the problem
这不是问题。它会起作用。
目前动作模式工具栏显示在工具栏上方,将整个布局向下移动,我希望它显示在我当前工具栏的顶部。我尝试了 this post and this one:
中的所有解决方案- 我尝试使用
windowActionModeOverlay
带和不带android:
前缀,但没有成功 - 我试了
view.ActionMode
和support.v7.view.ActionMode
,都没有成功 - 我尝试在我的工具栏和 activity 上使用 startActionMode,但都没有用。
setContentView
在super.onCreate
之前被调用了,这不是问题
现在我只是手动设置工具栏可见性,这看起来很糟糕。另外我在super.onCreate
之前设置了activity主题,会不会是问题所在?如果不是,那是什么?我怎样才能使属性起作用?
我的activity:
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>
我已经尝试了所有组合,发现您正在使用 values-v21 文件夹来定义棒棒糖及以上设备的样式,而您忘记添加 <item name="windowActionModeOverlay">true</item>
在 styles.xml 中 values-v21 文件夹中。
为了确保您遵循正确的路径,我刚刚在 Github 上发布了一个示例项目,展示了如何在自定义工具栏的顶部显示 ActionBar。
您也可以下载示例 APK 并尝试一下。
回答您在问题中发布的所有问题
I tried using windowActionModeOverlay with and without android: prefix, no success
您不必使用 android 前缀。 windowActionModeOverlay 有效。
<item name="windowActionModeOverlay">true</item>
I tried both view.ActionMode and support.v7.view.ActionMode, no success
这是必需的,因为您正在尝试使用具有单独操作栏命名空间的支持库 import android.support.v7.view.ActionMode;
I tried using startActionMode both on my toolbar and my activity, neither worked.
这两种方式都有效。如果你想看例子,你可以在 github 仓库中看到它。
setContentView is called before super.onCreate, this is not the problem
这不是问题。它会起作用。