是否可以在我的 Android 应用程序中获取所有Windows的列表?
如果没有,是否可以在创建新View或Window时收到通知?
干杯:)
例如:我想知道屏幕上是否有可见的键盘视图,或者屏幕上是否有警告对话框。那可能吗?我可以获得持有它的 View 或 Window 实例吗?
是否可以在我的 Android 应用程序中获取所有Windows的列表?
如果没有,是否可以在创建新View或Window时收到通知?
干杯:)
例如:我想知道屏幕上是否有可见的键盘视图,或者屏幕上是否有警告对话框。那可能吗?我可以获得持有它的 View 或 Window 实例吗?
是的,这可以通过多种不同的方式实现。屏幕上显示的所有视图都添加到一个 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 中设置一个线程,它会通过不断检查当前布局的子视图数量来通知您是否创建了键盘。
嘿使用此代码,这将帮助您查找是否在您的活动中创建了任何对话框
class MyActivity extends Activity {
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
Log.d("TAG", "New Window ATTACHED");
}
}
每次用户创建新对话框或其他东西时都会调用 onAttachedToWindow
您只能获取由您的应用程序管理的视图。
这包括除了状态和导航栏(高于 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
}
对于键盘问题,您可以在布局中使用自己的键盘视图实例和 KeyboardView:http: //developer.android.com/reference/android/inputmethodservice/KeyboardView.html
对您要处理的其他视图使用相同的原则:在布局中自己管理它们。我不知道你是否可以在你计划做的软件中,但这是一种可行的方式。