如何获取 ActionBar 视图?

新手上路,请多包涵

我正在使用 Showcase 库向用户解释我的应用程序功能。在某些时候,我需要调暗整个 ActionBar 以向用户呈现另一个功能。

为此,我正在使用 setAlpha(float num) View 。因此,为此我需要获取我的实际视图实例 ActionBar

顺便说一句,我正在使用 support-7-appcompat 库,它为旧系统提供 ActionBar 支持。

更新

同时我找到了这个选项,如果你配置一个自定义视图并将它添加到你 ActionBar 使用:

 getSupportActionBar().setCustomView(v);

然后得到 View ActionBar 你可以这样做:

 (View) activity.getSupportActionBar().getCustomView().getParent().getParent()

有没有更简单或更容易的方法来做到这一点?

原文由 Emil Adz 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 695
2 个回答

是的。您实际上可以使用此功能获取视图:

 public View getActionBarView() {
    Window window = getWindow();
    View v = window.getDecorView();
    int resId = getResources().getIdentifier("action_bar_container", "id", "android");
    return v.findViewById(resId);
}

这几乎是工作的方式是 actionbar 容器使用 id android.R.id.action_bar_container ,但这个 id 不是公开的。因此我们使用 getIdentifier() 来检索这个 id,然后剩下的就很简单了。

原文由 idunnololz 发布,翻译遵循 CC BY-SA 3.0 许可协议

我认为这个解决方案更完整,处理正常的 Activity 和 ActionBarActivity。

它还处理使用工具栏设置操作栏的情况,但您需要在您创建的活动中实现它:

 public static View getActionBarView(final Activity activity) {
    if (activity instanceof IToolbarHolder)
        return ((IToolbarHolder) activity).getToolbar();
    final String packageName = activity instanceof ActionBarActivity ? activity.getPackageName() : "android";
    final int resId = activity.getResources().getIdentifier("action_bar_container", "id", packageName);
    final View view = activity.findViewById(resId);
    return view;
}

public interface IToolbarHolder {
    public android.support.v7.widget.Toolbar getToolbar();
}

原文由 android developer 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题