2017-02-18 77 views
1

我在应用程序中有两个模块。在第二个我有作为上下文的活动。该任务需要通过第二个模块的工具栏动画。问题在于我不想将工具栏对象从1发送到2模块,也许有一些方法可以通过Activity obj获取它?Android查找工具栏

+0

您必须将'Toolbar'对象公开。 –

+0

你能列出一些代码还是更详细? –

+0

我不能,只是在纸上。我在应用程序中有两个模块。在第二个我有作为上下文的活动。该任务需要通过第二个模块的工具栏动画。问题在于我不想将工具栏对象从1发送到2模块,也许有一些方法可以通过Activity obj获取它? – Near1999

回答

2

这并不难。如果你会阅读这个answer,你可以看到该工具栏有私人ID,可以找到与getResources().getIdentifier("action_bar", "id", "android")。但是在某些情况下,当您尝试通过此ID查找视图时,会出现空白。然后你应该尝试用第二种方法递归地找到它。希望这可以帮助你。

@Nullable public Toolbar getToolbarView(@NonNull Context context) { 
     Activity activity = ((Activity) context); 

     int resId = context.getResources().getIdentifier("action_bar", "id", "android"); 

     Toolbar toolbar = (Toolbar) activity.findViewById(resId); 
     if (toolbar == null) { 
      toolbar = findToolbar((ViewGroup) activity.findViewById(android.R.id.content)); 
     } 
     return toolbar; 
    } 

    private Toolbar findToolbar(@NonNull ViewGroup viewGroup) { 
     for (int i = 0; i < viewGroup.getChildCount(); i++) { 
      View view = viewGroup.getChildAt(i); 
      if (view.getClass().getName().equals("android.support.v7.widget.Toolbar") 
        || view.getClass().getName().equals("android.widget.Toolbar")) { 
       return (Toolbar) view; 
      } else if (view instanceof ViewGroup) { 
       return findToolbar((ViewGroup) view); 
      } 
     } 
     return null; 
    }