11

是否可以在我的 Android 应用程序中获取所有Windows的列表?

如果没有,是否可以在创建新ViewWindow时收到通知?

干杯:)

例如:我想知道屏幕上是否有可见的键盘视图,或者屏幕上是否有警告对话框。那可能吗?我可以获得持有它的 View 或 Window 实例吗?

4

4 回答 4

1

是的,这可以通过多种不同的方式实现。屏幕上显示的所有视图都添加到一个 ViewGroup 中,通常是 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);
    ...
    }
}

您可以简单地在 onWindowFocusChanged 中设置一个线程,它会通过不断检查当前布局的子视图数量来通知您是否创建了键盘。

于 2012-09-05T21:12:58.493 回答
0

嘿使用此代码,这将帮助您查找是否在您的活动中创建了任何对话框

class MyActivity extends Activity {

@Override
    public void onAttachedToWindow() {

        super.onAttachedToWindow();

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

}

每次用户创建新对话框或其他东西时都会调用 onAttachedToWindow

于 2012-09-12T12:43:38.937 回答
0

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

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

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

ViewGroup decor = (ViewGroup)activity.getWindow().getDecorView();
int count = decor.getChildCount();
for(int i = 0; i < count; i++) {
    View view = decor.getChildAt(i); //voila
}
于 2012-09-12T12:17:56.637 回答
0

对于键盘问题,您可以在布局中使用自己的键盘视图实例和 KeyboardView:http: //developer.android.com/reference/android/inputmethodservice/KeyboardView.html

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

于 2012-09-12T12:10:03.897 回答