如何在Android中的Activity外调用getWindow()?

时间:2011-09-11 13:49:14

标签: java android

我正在尝试组织我的代码并将重复的函数移动到单个类中。 这行代码在扩展活动的类中工作正常:

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

但是,当我尝试将其包含在外部类中时,它无效。

如何从另一个类调用getWindow()将其应用于Activity?

5 个答案:

答案 0 :(得分:39)

您不得按照接受的答案中的建议保留参考资料。这有效,但可能会导致内存泄漏。

请在您的视图中使用此选项:

((Activity) getContext()).getWindow()...

您在视图中拥有对活动的托管引用,您可以使用getContext()检索该活动。将其强制转换为Activity并使用活动中的任何方法,例如getWindow()。

答案 1 :(得分:37)

在创建类时调用活动的引用,并在调用相关方法时使用它。

void someMethodThatUsesActivity(Activity myActivityReference) {
    myActivityReference.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
}

答案 2 :(得分:9)

您可以使用以下方法将当前上下文转换为活动:

/**
 * Get activity instance from desired context.
 */
public static Activity getActivity(Context context) {
    if (context == null) return null;
    if (context instanceof Activity) return (Activity) context;
    if (context instanceof ContextWrapper) return getActivity(((ContextWrapper)context).getBaseContext());
    return null;
}

然后你可以从活动中获取窗口。

答案 3 :(得分:0)

kotlin代码:

myView.rootView.findViewById<View>(android.R.id.content).context as Activity

答案 4 :(得分:-14)

使用

getActivity().getWindow().requestFeature(Window.FEATURE_PROGRESS);

这将更容易