Firefox OS 用の Web アプリケーションを開発しましたが、Android で「ネイティブ」に実行したいと考えていました。私のアプリケーションは、表示時にページ全体を埋めるダイアログ ボックスで構成されていますdiv
。これは、Firefox レスポンシブ デザイン ツールを使用してテストしたところ、正しくサイズ変更されました。ソフト キーボードが表示されたら、ダイアログの下部にいくつかのボタンがあるため、残ったビューポートに合わせてダイアログのサイズを変更したいと思います。
のみを含む単一のアクティビティを持つアプリケーションを作成しましたWebView
。キーボードが表示されたときにビューのサイズを変更したかったので、次を使用しました。
android:windowSoftInputMode="stateUnspecified|adjustResize"
WebView
キーボードが表示されていたときと何の違いもないように見えました。オンラインで調べたところ、この問題について不満を言う人がたくさんいましたが、それらはすべて同じTheme.Black.NoTitleBar.Fullscreen
テーマを使用していたという共通点がありましたが、私はそうではありません. その問題に対するすべての解決策を試しましたが、どれもうまくいきませんでした。
WebView
次に、サイズが変更されないことを意味するバグがあるのではないかと考え始めました。View
そこで、寸法を に印刷するカスタムを書きましたonLayout
。
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
Log.d(TAG, t + " " + r + " " + b + " " + l);
}
案の定、キーボードが表示されたり消えたりしたときに、ビューのサイズが正しく変更されていました。WebView
そのため、さらに調査を行ったところ、 を非表示にしてリロードし、再度表示する必要があるという回答がいくつか見つかりました。
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
Log.d(TAG, t + " " + r + " " + b + " " + l);
mWebView.setVisibility(View.GONE);
mWebView.layout(l, t, r, b);
mWebView.invalidate();
mWebView.reload();
mWebView.setVisibility(View.VISIBLE);
}
繰り返しますが、これは私の問題を解決しませんでした。(補足として、これは単一の .html ファイルを持つ Web アプリであり、JS によってアプリ内のすべての要素の状態が実行時に変更されるため、再読み込みはオプションではありません。)
WebView
私の質問は、キーボードが表示されているときにコンテンツが読み込まれた後にサイズを変更する方法を誰かが知っているかどうかです。