gpt4 book ai didi

android - 在Android中查找包含 View 的窗口

转载 作者:IT老高 更新时间:2023-10-28 22:03:26 28 4
gpt4 key购买 nike

我找不到获取包含任意 View v 的 Window 引用的方法。我找到了 getWindowToken ,但我不知道如何使用它?有人知道怎么做吗?

另外,有谁知道为什么它返回 IBinder 而不是 Window

最佳答案

嗯...因为所有 View 都有创建它们的 Activity 的引用(Context),您可以使用该Context 来获取窗口的引用。让我给你看我几分钟前写的这个例子:

// main activity
import android.app.Activity;
import android.os.Bundle;
public class GetWindow extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MyView view = new MyView(this);
view.changeSomethingInWindow(); // keep an eye on this method
setContentView(view);
}
}

然后,在您的 View 中,您可以这样做:

// your view :D
import android.app.Activity;
import android.content.Context;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;

public class MyView extends View{
public MyView(Context context) {
super(context);
}

@Nullable
private Activity getActivity() {
if (context == null) return null;
if (context instanceof Activity) return (Activity) context;
if (context instanceof ContextWrapper) return getActivity(((ContextWrapper)context).getBaseContext());
return null;
}

public void changeSomethingInWindow(){
// get a reference of the activity
Activity parent = getActivity();
if(parent == null) return;
// using the activity, get Window reference
Window window = parent.getWindow();
// using the reference of the window, do whatever you want :D
window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
}

在这种情况下,我将窗口的显示模式更改为全屏。希望这对您有所帮助。如果你遇到麻烦,请告诉我。

关于android - 在Android中查找包含 View 的窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2785558/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com