2

我有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包括创建新设置、复制等。似乎没有什么不同。我什至尝试将其设置为填充其父对象和内容,但没有效果。

任何想法如何让它调整大小?也许重绘甚至都不是问题?

4

0 回答 0