我有Dialog
一个自定义视图,它可以让我设置对话框的 x、y、宽度和高度,这一切正常。
我将其放置Dialog
在 PhoneGap 的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 中的 300 像素实际上是平板电脑上的 600 像素)。
这是我的调整大小方法:
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()
thendialog.show()
之前,之后以及之前和之后的setAttributes()
.
我也试图使其无效,但我不确定我做对了......这是我从 StackOverflow 复制的。这是我尝试过的:
dialog.getCurrentFocus().invalidate();
dialog.getWindow().getCurrentFocus().invalidate();
main.invalidate(); // view passed into dialog.setContentView
我还尝试了几种不同的设置/获取方式,LayoutParams
包括创建新设置、复制等。似乎没有什么不同。我什至尝试将其设置为填充其父对象和内容,但没有效果。
任何想法如何让它调整大小?也许重绘甚至都不是问题?