Android 查找工具栏
Android find toolbar
我在应用程序中有两个模块。在第二个中,我将 activity 作为上下文。该任务需要通过第二个模块的工具栏动画。问题在于我不想将工具栏对象从 1 发送到 2 模块,也许有一些方法可以通过 Activity obj?
这一点也不难。如果您阅读此 ,您会看到工具栏具有私有 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;
}
我在应用程序中有两个模块。在第二个中,我将 activity 作为上下文。该任务需要通过第二个模块的工具栏动画。问题在于我不想将工具栏对象从 1 发送到 2 模块,也许有一些方法可以通过 Activity obj?
这一点也不难。如果您阅读此 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;
}