7

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私の質問は、キーボードが表示されているときにコンテンツが読み込まれた後にサイズを変更する方法を誰かが知っているかどうかです。

4

2 に答える 2

2

position: absolute問題は、私が内部で使用していたことであることが判明しましたposition: fixed div。アウターdivはちゃんとリサイズしましたが、インナーはリサイズしませんでした。私が使用しなければならなかった理由position: absoluteは、WebKit にバグがあり、div を配置できないためですtransform fixed

于 2013-08-23T09:35:52.673 に答える