获取由onCreateOptionMenu(ActionMenu) - ToolBar创建的视图

时间:2015-09-10 05:24:47

标签: android android-toolbar android-menu

我试图从菜单中获取View,该onCreateOptionMenu()是在ToolBar的帮助下生成并绑定到ShowCaseView的右上角。

原因:

我想显示(View)menu.findItem(R.id.menu_search); //which returns null every time. ,其中显示了与ToolBar上的菜单相关联的应用程序的功能。

尝试:

  1. 设置ActionView(actionViewClass)。然后在

    的帮助下获取视图
    getWindow().getDecorView().findViewById(android.R.id.content).findViewById(R.id.action_award)
    
  2. 从“活动”中查找该视图 - 它确实返回视图但不是第一次尝试。

     mToolBar.getChildAt(0);
    
  3. 我在

    的帮助下获得ToolBar - Back Button(ImageButton)视图
    <menu xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        tools:context="com.mobcast.MotherActivity" >
    
        <item
            android:id="@+id/action_search"
            android:icon="@drawable/ic_nav_search"
            android:orderInCategory="100"
            android:title="@string/action_search"
            app:showAsAction="always"
            android:visible="true"
            tools:ignore="AlwaysShowAction"/>
        <item
            android:id="@+id/action_birthday"
            android:icon="@drawable/ic_toolbar_birthday"
            android:orderInCategory="100"
            android:title="@string/action_birthday"
            android:visible="true"
            app:showAsAction="always"/>
        <item
            android:id="@+id/action_award"
            android:icon="@drawable/ic_toolbar_award"
            android:orderInCategory="100"
            android:title="@string/action_award"
            app:showAsAction="always"/>
        <item
            android:id="@+id/action_event"
            android:icon="@drawable/ic_toolbar_search"
            android:orderInCategory="100"
            android:title="@string/action_event"
            app:showAsAction="always"/>
        <item
            android:id="@+id/action_refresh"
            android:icon="@drawable/ic_toolbar_search"
            android:orderInCategory="100"
            android:title="@string/action_refresh"
            android:visible="false"
            app:showAsAction="never"/>
        <item
            android:id="@+id/action_report"
            android:icon="@drawable/ic_toolbar_search"
            android:orderInCategory="100"
            android:title="@string/action_report"
            app:showAsAction="never"/>
    
    </menu>
    
  4. 这是我的menu_mother:

    ul

    ToolBar - DrawerIcon

    ToolBar - Event Button which is created using onCreateOptionMenu

1 个答案:

答案 0 :(得分:2)

<强> 1。 LayoutChangeListener

作为一种解决方法,您可以在onCreate中添加此内容,请注意回调将被调用两次,第一次无法找到视图,因为菜单尚未充气。因此,我已经包含了一个非空的检查,这是必需的。

final View.OnLayoutChangeListener onLayoutChangeListener = new View.OnLayoutChangeListener() {
  @Override
  public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft,
                             int oldTop, int oldRight, int oldBottom) {
    mMenuSearchView = v.findViewById(R.id.menu_search);
    if (mMenuSearchView != null) {
      //do whatever you want with the view
      mToolbar.removeOnLayoutChangeListener(this);
    }
  }
};
mToolbar.addOnLayoutChangeListener(onLayoutChangeListener);

<强> 2。使用DecorView帮助FindView

 new Handler().postDelayed(new Runnable(){
         View mMenuAwardView = getWindow().getDecorView().findViewById(android.R.id.content).findViewById(R.id.action_award)
 },2000);