我正在尝试组织我的代码并将重复的函数移动到单个类中。 这行代码在扩展活动的类中工作正常:
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
但是,当我尝试将其包含在外部类中时,它无效。
如何从另一个类调用getWindow()将其应用于Activity?
答案 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);
这将更容易