私はそれを考え出した。WebView の初期スケールを設定する必要がありました。これにより、画面解像度が 1080p であっても WebView を 720p で表示できます。
これは私が使用したコードです:
boolean _bReloaded = false;
boolean _bLoaded = false;
int _nWebScale = 100;
DisplayMetrics displaymetrics = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int nScreenHeight = displaymetrics.heightPixels;
if(nScreenHeight >= 1000){
_nWebScale = (int) Math.round((nScreenHeight/720.0) * 100.0);
_bReloaded = false;
mWebView.setVisibility(View.INVISIBLE);
}
mWebView.setInitialScale(_nWebScale);
しかし、私はそこで終わりではありませんでした。
この時点で、webView は適切な解像度で表示されます。ただし、webView が読み込まれると、webview ウィンドウのサイズが大きく変更されます。これが、上記のコードで webview を非表示にする理由です。別の問題は、私の特定のケースでは、HTML がウィンドウのサイズ変更イベントをリッスンしていなかったため、Web ビューのサイズが著しく変化した後に UI を再調整しなかったことです。これを修正するには、HTML を変更して JavaScript ウィンドウのサイズ変更イベントに反応させるか、最終的に行ったことを行うことができます。つまり、不適切なサイズの UI をロードした後に Web ビューをリロードします。このソリューションでは、ウィンドウのサイズ変更イベントに反応する必要はありませんでした:
mWebView.setWebChromeClient(new WebChromeClient() {
public void onProgressChanged(WebView view, int progress) {
if (progress == 100) {
if(_nWebScale != 100 && (mWebView.getVisibility() != View.VISIBLE) && !_bReloaded){
_bReloaded = true;
mWebView.reload();
} else {
_bLoaded = true;
displayLoadingSpinner(false);
mWebView.setVisibility(View.VISIBLE);
}
} else if (mProgressBar.getVisibility() != View.VISIBLE) {
displayLoadingSpinner(true);
_bLoaded = false;
}
}
});
元の質問とは直接関係ありませんが、役立つ可能性のある別の情報は次のとおりです。コード内で、webview から送信されたパラメーターに基づいて、VideoView のサイズと位置を変更する必要がありました。ただし、Web ビューは実際のディスプレイ解像度とは異なる解像度である可能性があるため、パラメーターを調整して、画面解像度に関してそれらを作成する必要がありました。
例えば:
//this parameter is equal to the width of the webview screen: 720
nHeightFromWebView;
//This is the x position of where the VideoView should be placed.
nXFromWebView;
float nScale = (float)_nWebScale/100;
int nAdjustedHeight = (int) Math.round(((float)nHeightFromWebView * nScale));
//The adjusted height computes to 1080 - the actual resolution of the screen
int nNewX = (int)Math.round((float)nXFromWebView * nScale);