我需要一些帮助来获取我的自定义webView 内容高度,请检查下面是我的代码
webView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
final int displayHeight = webView.getHeight();
final int contentRange = webView.getContentHeight();
final int y = v.getScrollY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
Log.d("Get webView height ", "" + displayHeight); // Result : 528
Log.d("Get webView content height ", "" + contentRange); // Result : 2112
Log.d("Get webView content scroll top ", "" + y);
return false;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_MOVE:
}
return false;
};
以上是我使用webview.setOnTouchListener获取自定义webView内容高度的代码,该代码正常工作。
但是,现在我想从按钮点击获取我的自定义WebView内容高度,这不起作用,我得到的是总是得到我的webView的高度而不是内容高度,在我的代码下方按钮点击
Button btn = (Button) this.getActivity().findViewById(R.id.btnCLick);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int webViewContentHeight = webView.getContentHeight();
Log.d("Get my custom webView content height", " " + webViewContentHeight); // Result : 528
}
});
非常感谢,如果我能有详细的程序,谢谢。
答案 0 :(得分:1)
我在渲染后找到获取contentHeight的最佳方式:
在布局中创建自己的类扩展WebView和此类:
public class BKWebView extends WebView {
private Activity yourActivity;
public BKWebView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public BKWebView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
public BKWebView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
}
@Override
public void invalidate() {
super.invalidate();
if (getContentHeight() > 0) {
// WebView has displayed some content and is scrollable.
if (yourActivity != null)
yourActivity.callBackWebView(getContentHeight());
}
}
/**
* @param yourActivity the yourActivity to set
*/
public void setYourActivity(Activity yourActivity) {
this.yourActivity = yourActivity;
}
}
在你的活动中实现回调方法然后在你的监听器中:
private webViewContentHeight;
BKWebView wv;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
wv = (BKWebView) findViewById(R.id.yourwebview);
wv.setYourActivity(this);
...
}
public void callBackWebView(int contentHeight) {
webViewContentHeight = contentHeight;
}
...
Button btn = (Button) this.getActivity().findViewById(R.id.btnCLick);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("Get my custom webView content height", " " + webViewContentHeight);
}
});
...
答案 1 :(得分:0)
很抱歉以前误解了你的问题。您可以在活动中设置“视图”和“按钮”全局,并在onCreate
处对其进行实例化。为该按钮单独onClickEvent
,而不是OnCreate
,您可以在其中调用可能有效的全局WebView.getContentHeight()
。
在第一种情况下,您可以通过向WebView
发送点击事件来使事情正常进行。更脏的解决方案。
WebView.performClick();
答案 2 :(得分:0)
你可以使用javascript
String js = "javascript:function initialize() { "
+ "var d = document.getElementsByTagName('body')[0];"
+ "var visibleH = window.innerHeight; "
+ "var fullH = d.offsetHeight; "
+ "jsInterface.jsGetContentHeight(visibleH ,fullH); "
+ "}";
wv.loadUrl(js);
wv.loadUrl("javascript:initialize()");
然后为webview定义JavaScriptInterface以检索值
wv.getSettings().setJavaScriptEnabled(true);
wv.addJavascriptInterface(new JavaScriptInterface(context),
"jsInterface");
public class JavaScriptInterface {
Context mContext;
/** Instantiate the interface and set the context */
JavaScriptInterface(Context c) {
mContext = c;
}
@JavascriptInterface
public void jsGetContentHeight(int visibleH,int fullH) {
Toast.makeText(mContext, visibleH +"-"+ fullH, Toast.LENGTH_LONG).show();
}
}