私はDialog
カスタムビューを持っていて、ダイアログのx、y、幅、高さを設定することができ、それはすべてうまくいっています。
これをPhoneGap による作成Dialog
の上に配置します。WebView
で何が起こっているかに応じて、ダイアログの位置を変更する必要がある場合があるWebView
ため、JavaScript から呼び出してサイズを変更できる関数を作成しました。
これが私が最初に設定する方法ですDialog
:
WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
lp.x = this.dpToPixels(dialogDimensions.optInt("x"));
lp.y = this.dpToPixels(dialogDimensions.optInt("y"));
lp.width = this.dpToPixels(dialogDimensions.optInt("width"));
lp.height = this.dpToPixels(dialogDimensions.optInt("height"));
lp.gravity = Gravity.TOP | Gravity.LEFT;
// make it possible to click outside dialog
lp.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH;
dialog.setContentView(main);
dialog.show();
dialog.getWindow().setAttributes(lp);
dialogDimensions
はJSONObject
x、y、幅、高さのパラメータを持ちdpToPixels()
、ピクセル密度の違いを考慮してサイズを変換します (つまり、Nexus 10 では、WebView の 300px は実際にはタブレットでは 600px です)。
これが私のサイズ変更方法です:
public String resize(JSONObject dimensions) {
dialogDimensions = dimensions;
WindowManager.LayoutParams lp = dialog.getWindow().getAttributes();
lp.x = this.dpToPixels(dialogDimensions.optInt("x"));
lp.y = this.dpToPixels(dialogDimensions.optInt("y"));
lp.width = this.dpToPixels(dialogDimensions.optInt("width"));
lp.height = this.dpToPixels(dialogDimensions.optInt("height"));
Log.i(LOG_TAG, dialog.getWindow().getAttributes().debug("Before Resize: "));
dialog.getWindow().setAttributes(lp);
Log.i(LOG_TAG, dialog.getWindow().getAttributes().debug("After Resize: "));
return "";
}
ログメッセージは私が期待するものを記録していますが、ダイアログは何もしません...
私が試したこと
の前、後、および前後の両方を試しましdialog.show()
た。dialog.show()
setAttributes()
私もそれを無効にしようとしましたが、それを正しく行ったかどうかはわかりません...それは私が StackOverflow からコピーしたものでした。これが私が試したことです:
dialog.getCurrentFocus().invalidate();
dialog.getWindow().getCurrentFocus().invalidate();
main.invalidate(); // view passed into dialog.setContentView
また、新しいセットの作成、コピーなど、いくつかの異なる設定/取得方法を試しましたがLayoutParams
、違いはないようです。親などを埋めるように設定しようとしましたが、効果はありませんでした。
サイズを変更する方法はありますか?多分それは再描画の問題でさえありませんか?