18

我想知道是否可以告诉android仅在我想要的时候拆分ActionBar,但在同一个Activity上。我的用例是默认情况下,我在栏上的操作可以折叠,但是在长按某个项目时,我进入“编辑任务”模式,其中操作栏用于提供一些速记编辑任务。我希望这种“编辑模式”使用拆分操作栏,因为它具有最好立即可见的图标,并为一般视图保留“不拆分”操作栏 - 它只是“设置”等等

所以问题是,我可以android:uiOptions="splitActionBarWhenNarrow"从代码中设置,而不是在清单中硬编码吗?

PS:我正在使用 ActionBar Sherlock。

4

4 回答 4

23

可以通过调用将原生操作栏设置为拆分模式getWindow().setUiOptions(ActivityInfo.UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW)

窗口 UI 选项在设置后无法读取,因此您必须使用 ActionBarSherlock 调用getSherlock().setUiOptions(...). 您不必同时调用两者。ABS 会在适当的时候自动调用上述内容。

必须在创建装饰视图之前完成。进行此调用以确保始终发生的最安全的地方是在您调用之前onCreate在您的活动方法中。super.onCreate

于 2012-07-22T18:46:36.820 回答
3

看一下ActionBarSherlockSamples,SplitActionModes.java。在此示例中,当按下“开始”按钮时,屏幕底部会显示一个拆分操作栏:

调用它以显示拆分操作栏:

mMode = startActionMode(new AnActionModeOfEpicProportions());

mMode 是 ActionMode 的类型,当您希望操作栏消失时,您需要在其上调用“finish()”。

AnActionModeOfEpicPropotions 是 ActionMode.Callback 的一个实现:

private final class AnActionModeOfEpicProportions implements ActionMode.Callback {
    @Override
    public boolean onCreateActionMode(ActionMode mode, Menu menu) {
        // add your menu here...
    }

    @Override
    public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
        // handles your action menu clicked event
        return true;
    }
}
于 2012-07-22T17:28:29.913 回答
0

我只是在尝试是否可以在一个 Activity 中有一个 ActionBar 并在另一个 Activity 中有一个 Split 。

我在两个活动的 onCreateOptionsMenu 中添加了操作栏并添加了 getWindow().setUiOptions(ActivityInfo.UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW);

就在活动中的 onCreate 之前,我想要拆分操作,令我惊讶的是它起作用了。:)

然后我使用 getActionBar().hide() 在按钮单击时隐藏拆分操作栏,它也可以工作。

我想如果你可以试试这个,你可以让它工作并根据你的需要进行定制。最初隐藏它并在 onLongClick 显示它,并在执行必要的操作后再次隐藏它。(我唯一错过的是使用支持库检查这一点。会做并更新你)

希望,这可能会以某种方式帮助你。快乐编码:)

于 2014-02-06T20:12:12.017 回答
-2
private final class AnActionModeOfEpicProportions implements ActionMode.Callback
{
  @Override
  public boolean onCreateActionMode(ActionMode mode,Menu menu)
  {
    // add your menu here...
  }
  @Override
  public boolean onActionItemClicked(ActionMode mode,MenuItem item)
  {
    // handles your action menu clicked event
    returntrue;
  }
}
于 2013-10-21T11:55:54.413 回答