获取Android中所有窗口的列表

获取Android中所有窗口的列表,android,Android,可以在我的Android应用程序中获取所有窗口的列表吗 如果没有,是否可以在创建新的视图或窗口时获取通知 干杯:) 例如:我想知道屏幕上是否有可见的键盘视图,或者屏幕上是否有警报对话框。可能吗?我可以获取包含它的视图或窗口实例吗?是的,这可以通过多种不同的方式实现。屏幕上显示的所有视图都添加到视图组中,该视图组通常是布局,如R.layout.main、LinearLayout、RelativeLayout等 在构建布局后,您可以在运行时使用诸如onWindowFocusChanged之类的处理程

可以在我的Android应用程序中获取所有窗口的列表吗

如果没有,是否可以在创建新的视图窗口时获取通知

干杯:)


例如:我想知道屏幕上是否有可见的键盘视图,或者屏幕上是否有警报对话框。可能吗?我可以获取包含它的视图或窗口实例吗?

是的,这可以通过多种不同的方式实现。屏幕上显示的所有视图都添加到视图组中,该视图组通常是布局,如R.layout.main、LinearLayout、RelativeLayout等

在构建布局后,您可以在运行时使用诸如onWindowFocusChanged之类的处理程序访问视图:

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    int count = myLayout.getChildCount();
    for(int i = 0; i < count; i++)
    {
    View v = myLayout.getChildAt(i);
    ...
    }
}
@覆盖
WindowFocusChanged上的公共无效(布尔hasFocus){
int count=myLayout.getChildCount();
for(int i=0;i

您只需在onWindowFocusChanged中设置一个线程,通过不断检查当前布局的子视图数量,该线程将通知您是否创建了键盘

对于键盘问题,您可以将自己的键盘视图实例与布局中的KeyboardView一起使用:


对要处理的其他视图使用相同的原则:在布局中自己管理它们。我不知道您是否可以在您计划使用的软件中使用,但这是一种可行的方法。

您只能获得由应用程序管理的视图

这包括除状态栏和导航栏(高于蜂巢)之外的所有视图。如果您选择拥有自己的InputMethod,该视图也可以是您的,但您需要注册正确的键盘视图。更多信息请参见问题

否则,如果要获取窗口中的所有视图:

ViewGroup decor = (ViewGroup)activity.getWindow().getDecorView();
int count = decor.getChildCount();
for(int i = 0; i < count; i++) {
    View view = decor.getChildAt(i); //voila
}
ViewGroup decor=(ViewGroup)activity.getWindow().getDecorView();
int count=decor.getChildCount();
for(int i=0;i
嘿,请使用此代码。这将帮助您查找活动中是否创建了任何对话框

class MyActivity extends Activity {

@Override
    public void onAttachedToWindow() {

        super.onAttachedToWindow();

        Log.d("TAG", "New Window ATTACHED");
    }

}

每次用户创建新对话框或其他可以进一步解释您的问题的内容时,都会调用onAttachedToWindow。我猜您走错了方向。添加了一个用例示例。我想用键盘访问视图。更具体地说,我也想将其绘制到画布上。要获取窗口列表,请参见以下问题:如果我没有弄错的话,所有键盘视图以及对话框和警报对话框都是在不同窗口上呈现的视图。我可以枚举窗口吗?或者其他窗口中的视图?同时,您的代码用于活动或窗口。回调?不管怎样,我的计划是什么?如何通过LayoutInflater分配它?您可以获得附加的视图吗?为此,您必须设计自定义视图,在其中覆盖此onAttachedToWindow方法&如果onAttachedToWindow调用了onAttachedToWindow,请将该视图id或对象抛出消息传递给处理程序&在该处理程序中执行所需操作