在Android上从Java设置splitActionBarWhenNarrow

时间:2012-07-22 16:18:23

标签: java android android-actionbar actionbarsherlock

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

所以问题是,我可以从代码中设置android:uiOptions="splitActionBarWhenNarrow",而不是在Manifest中对其进行硬编码吗?

PS:我正在使用ActionBar Sherlock。

4 个答案:

答案 0 :(得分:23)

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

设置窗口UI选项后无法读取它们,因此使用ActionBarSherlock,您必须调用getSherlock().setUiOptions(...)。你不必同时打电话。 ABS将在适当时自动调用上述内容。

必须在创建装饰视图之前完成。最安全的地方是确保始终发生这种情况,请在您的活动onCreate方法之前致电super.onCreate

答案 1 :(得分: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;
    }
}

答案 2 :(得分:0)

如果我在一个Activity中有一个ActionBar而在另一个Activity中有一个Split,那我只​​是在尝试。

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

就在onCreate之前我想要分裂动作并且令我惊讶它有效。 :)

然后我使用getActionBar()。hide()来隐藏按钮点击时的分割操作栏,它也有效。

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

希望,这可能会在某种程度上帮助你。快乐的编码:)

答案 3 :(得分:-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;
  }
}