如何获得工具栏上使用的“向上”按钮?

时间:2014-11-27 16:06:52

标签: android android-actionbar right-to-left android-toolbar

这是一个简短的问题:

我正在尝试强制操作栏(由工具栏使用)使用LTR对齐方式。我成功地使布局本身使用了LTR,但没有使用“向上”按钮(就像我在here引入之前已完成Toolbar)。

看来这个视图没有ID,我认为使用getChildAt()风险太大。

有人可以帮忙吗?


答案

根据this answer,这是我发现解决此问题的一种方法。

我这样做是为了保证只找到“向上”按钮,无论它做什么,它都会恢复到以前的状态。

以下是代码:

  @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
  @Override
  public boolean onCreateOptionsMenu(final Menu menu)
    {
    // <= do the normal stuff of action bar menu preparetions
    if(VERSION.SDK_INT>=VERSION_CODES.JELLY_BEAN_MR1&&getResources().getConfiguration().getLayoutDirection()==View.LAYOUT_DIRECTION_RTL)
      {
      final ArrayList<View> outViews=new ArrayList<>();
      final CharSequence previousDesc=_toolbar.getNavigationContentDescription();
      for(int id=0;;++id)
        {
        final String uniqueContentDescription=Integer.toString(id);
        _toolbar.findViewsWithText(outViews,uniqueContentDescription,View.FIND_VIEWS_WITH_CONTENT_DESCRIPTION);
        if(!outViews.isEmpty())
          continue;
        _toolbar.setNavigationContentDescription(uniqueContentDescription);
        _toolbar.findViewsWithText(outViews,uniqueContentDescription,View.FIND_VIEWS_WITH_CONTENT_DESCRIPTION);
        if (outViews.isEmpty())
           if (BuildConfig.DEBUG)
                    throw new RuntimeException(
                            "You should call this function only when the toolbar already has views");
                else
                    break;
        outViews.get(0).setRotation(180f);
        break;
        }
      _toolbar.setNavigationContentDescription(previousDesc);
      }
    //
    return super.onCreateOptionsMenu(menu);
    }

1 个答案:

答案 0 :(得分:7)

  

此视图似乎没有ID

你说得对,the navigation view is created programmatically并且永远不会设置ID。但您仍然可以使用View.findViewsWithText找到它。

View.findViewsWithText带有两个标志:

导航视图的默认内容说明为“向上导航”,或者AppCompat的资源ID为abc_action_bar_up_description,框架的资源ID为action_bar_up_description,但您可以轻松应用自己的内容使用Toolbar.setNavigationContentDescription

以下是一个示例实现:

final Toolbar toolbar = ...;
toolbar.setNavigationContentDescription("up");
setActionBar(toolbar);

final ArrayList<View> outViews = Lists.newArrayList();
toolbar.findViewsWithText(outViews, "up", View.FIND_VIEWS_WITH_CONTENT_DESCRIPTION);

outViews.get(0).setRotation(180f);

<强>结果

example