Actionmode Bar 没有覆盖整个标题栏
Actionmode Bar doesn't cover whole titlebar
在我的应用程序中,我需要使用 ActionMode。
我遵循了几个指南和教程(https://medium.com/asos-techblog/style-actionmode-on-android-5e613fa77c32, https://developer.android.com/guide/topics/ui/menus 例如)来实现我的上下文操作菜单,但正如您在这张图片中看到的那样:
https://i.stack.imgur.com/ag2Mp.jpg
标题栏的一部分在底部仍然可见。我的问题是我是否可以做些什么来改变这种行为。
我也尝试更改我的 ActionModeBar 的样式,但是当我更改样式时它变得不可见(仅显示图标)并且标题栏完全可见。
除了包含按钮的菜单外,我没有对 ActionMode 进行任何更改:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/stopCab"
android:title="Stop contextual action bar"
app:showAsAction="ifRoom"
android:icon="@drawable/ic_baseline_cancel_24"/>
<item android:id="@+id/deleteCab"
android:title="Delete selected items"
app:showAsAction="ifRoom"
android:icon="@drawable/ic_delete_white_24dp"/>
</menu>
正在初始化动作模式:
private ActionMode.Callback actionModeCallback = new ActionMode.Callback() {
@Override
public boolean onCreateActionMode(ActionMode actionMode, Menu menu) {
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.contextual_action_bar_menu, menu);
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) {
return false;
}
@Override
public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {
switch (menuItem.getItemId()) {
case R.id.deleteCab:
//TODO: do something
return true;
case R.id.stopCab:
//TODO: do something
return true;
default:
return false;
}
}
@Override
public void onDestroyActionMode(ActionMode actionMode) {
FieldChooserActivity.this.actionMode = null;
}
};
并启动 ActionMode:
FieldChooserActivity.this.actionMode = startActionMode(FieldChooserActivity.this.actionModeCallback);
在我的风格中,AppTheme parent 是 Theme.AppCompat.Light.DarkActionBar
每个Activity有
android:theme="@style/AppTheme.NoActionBar">
在 AndroidManifest.
也许这就是为什么我不能在 ActionMode 不可见的情况下更改样式的错误。
希望有人能帮我解决这个问题,在此先感谢!
我找到了解决我的问题的解决方案(ActionMode 栏没有覆盖工具栏)。
当我查看 activity 的布局时,我看到工具栏中有一个名为“?attr/actionBarSize”的高度属性:
<androidx.appcompat.widget.Toolbar
android:id="@+id/fieldChooserToolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay">
然后我将高度添加到我的 ActionMode 的自定义样式中:
<style name="ActionModeTheme" parent="AppTheme">
<item name="windowActionModeOverlay">true</item>
<item name="actionModeCloseDrawable">@drawable/ic_delete_white_24dp</item>
<item name="actionMenuTextColor">@android:color/white</item>
<item name="height">?attr/actionBarSize</item>
<item name="background">@color/colorSecondary</item>
<item name="android:src">@drawable/ic_baseline_close_24</item>
</style>
最后一部分是我在 AppTheme-styling 中添加了以下行:
<item name="actionModeStyle">@style/ActionModeTheme</item>
然后成功了!
我的 ActionMode 栏不可见的第二个问题很可能是由于将 actionModeStyling 添加到 AppTheme.NoActionBar。
在我的应用程序中,我需要使用 ActionMode。
我遵循了几个指南和教程(https://medium.com/asos-techblog/style-actionmode-on-android-5e613fa77c32, https://developer.android.com/guide/topics/ui/menus 例如)来实现我的上下文操作菜单,但正如您在这张图片中看到的那样:
https://i.stack.imgur.com/ag2Mp.jpg
标题栏的一部分在底部仍然可见。我的问题是我是否可以做些什么来改变这种行为。
我也尝试更改我的 ActionModeBar 的样式,但是当我更改样式时它变得不可见(仅显示图标)并且标题栏完全可见。
除了包含按钮的菜单外,我没有对 ActionMode 进行任何更改:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/stopCab"
android:title="Stop contextual action bar"
app:showAsAction="ifRoom"
android:icon="@drawable/ic_baseline_cancel_24"/>
<item android:id="@+id/deleteCab"
android:title="Delete selected items"
app:showAsAction="ifRoom"
android:icon="@drawable/ic_delete_white_24dp"/>
</menu>
正在初始化动作模式:
private ActionMode.Callback actionModeCallback = new ActionMode.Callback() {
@Override
public boolean onCreateActionMode(ActionMode actionMode, Menu menu) {
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.contextual_action_bar_menu, menu);
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) {
return false;
}
@Override
public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {
switch (menuItem.getItemId()) {
case R.id.deleteCab:
//TODO: do something
return true;
case R.id.stopCab:
//TODO: do something
return true;
default:
return false;
}
}
@Override
public void onDestroyActionMode(ActionMode actionMode) {
FieldChooserActivity.this.actionMode = null;
}
};
并启动 ActionMode:
FieldChooserActivity.this.actionMode = startActionMode(FieldChooserActivity.this.actionModeCallback);
在我的风格中,AppTheme parent 是 Theme.AppCompat.Light.DarkActionBar 每个Activity有
android:theme="@style/AppTheme.NoActionBar">
在 AndroidManifest. 也许这就是为什么我不能在 ActionMode 不可见的情况下更改样式的错误。
希望有人能帮我解决这个问题,在此先感谢!
我找到了解决我的问题的解决方案(ActionMode 栏没有覆盖工具栏)。
当我查看 activity 的布局时,我看到工具栏中有一个名为“?attr/actionBarSize”的高度属性:
<androidx.appcompat.widget.Toolbar
android:id="@+id/fieldChooserToolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay">
然后我将高度添加到我的 ActionMode 的自定义样式中:
<style name="ActionModeTheme" parent="AppTheme">
<item name="windowActionModeOverlay">true</item>
<item name="actionModeCloseDrawable">@drawable/ic_delete_white_24dp</item>
<item name="actionMenuTextColor">@android:color/white</item>
<item name="height">?attr/actionBarSize</item>
<item name="background">@color/colorSecondary</item>
<item name="android:src">@drawable/ic_baseline_close_24</item>
</style>
最后一部分是我在 AppTheme-styling 中添加了以下行:
<item name="actionModeStyle">@style/ActionModeTheme</item>
然后成功了!
我的 ActionMode 栏不可见的第二个问题很可能是由于将 actionModeStyling 添加到 AppTheme.NoActionBar。