我有一个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,width,height参数,dpToPixels()
转换尺寸以解决像素密度差异(即在Nexus 10,300px上)在WebView中平板电脑实际上是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
的方式,包括创建新的设置,复制等。似乎没有什么区别。我甚至尝试将其设置为填充其父级和东西,但没有效果。
任何想法如何让它调整大小?也许它甚至不是重绘的问题?