私の Android アプリですべてのWindowsのリストを取得することは可能ですか?
そうでない場合、新しいViewまたはWindowの作成に関する通知を受け取ることは可能ですか?
乾杯 :)
例: 画面にキーボード ビューが表示されているかどうか、または画面にアラート ダイアログが表示されているかどうかを知りたいです。それは可能ですか?それを保持している View または Window インスタンスを取得できますか?
私の Android アプリですべてのWindowsのリストを取得することは可能ですか?
そうでない場合、新しいViewまたはWindowの作成に関する通知を受け取ることは可能ですか?
乾杯 :)
例: 画面にキーボード ビューが表示されているかどうか、または画面にアラート ダイアログが表示されているかどうかを知りたいです。それは可能ですか?それを保持している View または Window インスタンスを取得できますか?
はい、これはさまざまな方法で可能です。画面に表示されているすべてのビューは、通常、R.layout.main、LinearLayout、RelativeLayout などのレイアウトである ViewGroup に追加されます。
レイアウトが構築された後、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
処理したい他のビューについても同じ原則を使用してください: それらを自分のレイアウトで自分で管理してください。あなたが計画しているソフトウェアでできるかどうかはわかりませんが、これはうまくいく方法です。