我在一个片段中有一个webview。我还没有找到任何建议的方法来设置初始缩放。大多数人都想缩放,因此内容适合webview。对于我而言,作为一个用户,正是我不想要的。我希望内容缩放比视图大 - 这使我能够以更大的尺寸读取标题,并且如果我需要阅读更长的内容,我可以横向滚动。
因此,对于各种用户和设备,使用固定的缩放比例或尝试猜测用户想要的内容是毫无意义的。
我启用了缩放控件,因此,用户可以为特定页面设置所需的缩放...但是,这只会持续到用户单击链接为止(因为新加载的内容使用webview的缩放比例)设置为最初),或者用户旋转设备(因为destroy / create也会将我们带回webview的初始缩放比例)。
可以轻松设置初始缩放比例。就个人而言,我喜欢220:
mWebView.setInitialScale(220);
但是,所有新内容都设置为此范围,并且,显然无法在运行中再次设置比例。
我还可以使用用户pref设置比例:
mWebView.setInitialScale(defaultPrefs.getInt("xyzBrowserScale", 220));
嘿,我还可以在onTouch回调或onPause中检测并保存用户可能设置的任何内容:
public void onPause() {
// save current zoom as preference setting
SharedPreferences.Editor ed = defaultPrefs.edit();
ed.putInt("xyzBrowserScale", Math.round(mWebView.getScale()*100));
ed.commit();
super.onPause();
}
这里有趣且烦人的地方。无论我使用什么回调,新设置只有在下次创建webview时才会生效 - 因为它依赖于setInitialScale()。因此,要使所选缩放对新内容有效,用户可以旋转设备,重新创建片段和webview!
这就是我所谓的用户界面傻瓜:设置缩放,然后旋转以使其变得有用。
所以,问题是,如何更优雅地执行?我不知道任何强制重新创建片段的方法。
或者,我错过了什么?有更好的方法吗?
答案 0 :(得分:0)
我有一个可以通过的解决方案 - 而不是解决方案 - 没有更好的东西。首先,我没有意识到WebViewClient的onScaleChanged()回调。这是一个很好的地方,可以让用户调整缩放,并将其存储在类变量中:
mWebView.setWebViewClient(new WebViewClient() {
// stop links from opening in system browser
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
public void onScaleChanged(WebView view, float oldScale, float newScale) {
currentZoom = Math.round(newScale*100);
}
});
然后,我在溢出菜单中添加了一个项目,以保存缩放。在该菜单上单击,我可以将currentZoom保存到用户首选项,并弹出一个带有注释的对话框以旋转设备:
new AlertDialog.Builder(getActivity())
.setMessage("Click OK, then rotate device to apply saved zoom")
.setIcon(android.R.drawable.ic_dialog_alert)
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
}})
.show();