问题的详细解释可以理解这个问题 ,因为用户不得不添加的图像来解释它更好。
我加载HTML内容在我的WebView。 我的布局具有许多视图和web视图是内部滚动型地方(按照布局要求)。 请不要为回答- "Don't put WebView inside ScrollView"
。 我知道,它不是一个好东西放的WebView滚动型里面,但按规定我必须这样做。
所以,我已经离开片段(显示列表项)和右片段(从左边片列表项的选择显示数据所反映)。 现在,首先当我加载内WebV HTML内容显示它正确。 之后,当我刷新网页视图与新的HTML内容出现问题。
假设,我的第一个HTML内容的100行它正确地显示,然后我重装的WebView与我的新的HTML内容是40行那么的WebView不收缩,装配与40行的内容,它仍然只要100线示出了在底部白色/空白。
所以,似乎WebView中能够从更少的内容被预先加载到更多的内容,但无法重新大小本身当含量小于先前加载的内容重新大小本身。
我曾尝试过很多办法,
- 添加
android:hardwareAccelerated="true"
的清单 - 此博客
- 也有许多其他的方式和博客
- 此外,我曾试图用
mWebView.clearView();
这将导致重新大小的WebView的大小,但在倍的WebView开始闪烁这仅仅是烦人。 类似这个视频
但是,找不到任何妥善的解决办法。 如果有人对你有同样的问题之前,让我知道我可以申请的最佳解决方案。
UPDATE -
进一步谷歌搜索后,似乎这是在蜂窝众所周知的问题。 这个问题也表明了类似的问题。
似乎没有办法调整的WebView(减少)的大小动态,一旦其加载。 所以,这可能会解决我的问题唯一的办法就是重装完整的WebView。
所以,与其定义XML中的片段,我的每一次动态添加片段改变了我的东西。 通过这我能解决我的问题。
这是一个已知问题WebView
和一些可用的解决方案并不适用于所有的设备上运行。
我尝试了很多解决方案,SO给出答案,也搜查了互联网,但他们没有太为我工作。
我结束了, 取出的WebView,并在同一位置再次布局添加的WebView中
下面是演示代码,
final RelativeLayout rl = new RelativeLayout(this);
myWebView = new WebView(this);
myWebView.setBackgroundColor(Color.GRAY);
myWebView.loadUrl("file:///android_asset/1.htm");
rl.addView(myWebView); // ******* Added At Index 0
Button btn = new Button(this);
btn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if (!flg) {
rl.removeViewAt(0);
myWebView = new WebView(MainActivity.this);
myWebView.setBackgroundColor(Color.GRAY);
myWebView.loadUrl("file:///android_asset/3.htm");
rl.addView(myWebView, 0, new RelativeLayout.LayoutParams(
new LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT)));
flg = true;
} else {
rl.removeViewAt(0);
myWebView = new WebView(MainActivity.this);
myWebView.setBackgroundColor(Color.GRAY);
myWebView.loadUrl("file:///android_asset/1.htm");
rl.addView(myWebView, 0, new RelativeLayout.LayoutParams(
new LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT)));
flg = false;
}
}
});
rl.addView(btn); // ******* Added At Index 1
setContentView(rl);
家伙,看来我找到了本地内容的解决方案。 你应该在加载新的内容之前,只需要调用webView.reload() - 不知何故它的大小调整,没有任何闪烁。
在这里,我已经改变了的WebView取决于softkeyboard显示的高度
activityRootView = (RelativeLayout) findViewById(R.id.webview1);
mWebView = (WebViewEx) WebViewActivity.this.findViewById(R.id.webview);
activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
public void onGlobalLayout() {
Rect r = new Rect();
//r will be populated with the coordinates of your view that area still visible.
activityRootView.getWindowVisibleDisplayFrame(r);
int heightDiff = activityRootView.getRootView().getHeight() - (r.bottom - r.top);
if(heightDiff != lastValue) {
if (heightDiff > 100) { // if more than 100 pixels, its probably a keyboard...
Log.i("Screen Size Changed","KeyBoard Displaying"+ r.bottom);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
params.height=r.bottom;
mWebView.setLayoutParams(params);
//appView.sendJavascript("onKeyBoardShow(" + r.bottom + ");");
} else {
/// appView.sendJavascript("onKeyBoardHide();");
Log.i("Screen Size Changed","KeyBoard not displaying" +r.bottom);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
params.height=r.bottom;
mWebView.setLayoutParams(params);
}
lastValue = heightDiff;
}
}
});
我还没有尝试过,但你为什么不给通过重新设置weblayout PARAMS,U加载新的内容之前一试。 即设置高度和宽度wrapcontent。 如果成功找到请回复。 如果不会找到成功最好去javascipt的
我把我的WebView到飘的知名度,同时它不见了内容加载到WebView中。 然后,我的可见性设置为可见让DOM和JS负荷后,它似乎正确绘制长度。 由于没有像onPageFinished回调确定何时JS执行完毕,我给的WebView之前,我的可见性设置为true的一秒的延迟。 这种解决方法足以满足我的目的,所以希望它解决了一些你们的需求!
每次创造的WebView的对象,并给它的参数是一个痛苦而不是你可以做下面的步骤,它会工作
网页视图将缩小它的高度。
确保你没有把任何内容empty.html
该做的魔力! 它说
Android的特性:机器人:layout_weight =“1布局应该工作...
就我而言,Webview是在RelativeLayout的。 这样做THI机器人:layout_height =“WRAP_CONTENT”工作就像一个魅力:)
作为@Ankit指出,去一个空白页面可能会有帮助。 “有关:空白”比较好,虽然。