gpt4 book ai didi

android - 如何使 ActionMode 与自定义工具栏对齐

转载 作者:太空狗 更新时间:2023-10-29 14:10:52 24 4
gpt4 key购买 nike

我有一项新支持工具栏和抽屉导航的 Activity 。工具栏与内容相关,例如元素 list 。可以选择多个项目 - 然后显示 ActionMode(上下文操作栏)。然而系统的ActionMode位置、大小和布局顺序与Toolbar不对应,这倒是合适的。

问题是:如何调整系统 ActionMode 以对应(对齐)我的工具栏?或者有其他推荐的替代方案吗?请参阅下面的案例

纵向

NavDrawer 可能隐藏在侧面(1-绿色)- 这对于工具栏和 ActionMode 都是可以的。工具栏及其内容都被抽屉打开时的抽屉导航重叠(2-黄色)。但是,当 ActionMode 处于 Activity 状态时,它始终显示在 NavDrawer 上方(3-红色),但我希望它看起来像(2-黄色),因为 ActionMode 与隐藏内容相关。

这个问题类似于这个问题: How to make the Contextual ActionMode Bar overlay the appcompat-v7 Toolbar but not the navigation drawer?

ActionMode portrait

平板/横向

在横向模式下,NavDrawer 位于工具栏和内容旁边(左)。 ActionMode 始终覆盖 NavDrawer 和 Toolbar 并且具有全屏宽度(右红色)。我再次希望 ActionMode 位于与工具栏相同的位置(左黄色)。

ActionMode landscape/tablet

最佳答案

我通过使用另一个 Toolbar (actionModeToolbar) 解决了这个问题,我可以将它放在布局中的任何位置并根据需要显示或隐藏它。

我在这里找到了一些如何使用 Toolbar 的有用提示: https://gist.github.com/gabrielemariotti/ae63392e1c70bc33af8b

下面是我如何使用 Toolbar 和遗留 ActionMode.Callback 创建 ActionMode。为了部分兼容,我使用了类似于系统 ActionMode 的方法。请注意,不再需要 ActionMode.Callback,因为未使用系统 ActionMode 并且可以重构代码。

class ToolbarActionMode {

Toolbar actionModeToolbar;
ActionMode.Callback callback;

void startActionMode() {
actionModeToolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
toolbarActionMode.finishActionMode();
}
});
actionModeToolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
@Override public boolean onMenuItemClick(MenuItem menuItem) {
return callback.onActionItemClicked(null, menuItem);
}
});
// will create menu using inflateMenu(R.menu.menu_res)
callback.onCreateActionMode(null, null);
invalidate();
actionModeToolbar.setVisibility(View.VISIBLE);
}

void finishActionMode() {
callback.onDestroyActionMode(null);
actionModeToolbar.setVisibility(View.GONE);
}

void invalidate() {
// will update title + menu
callback.onPrepareActionMode(null, actionModeToolbar.getMenu());
}

void setTitle(CharSequence title) {
actionModeToolbar.setTitle(title);
}

void inflateMenu(int menuRes) {
actionModeToolbar.inflateMenu(menuRes);
}
}

关于android - 如何使 ActionMode 与自定义工具栏对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28588002/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com