我有一个包含一个单一的web视图显示不同的HTML内容基于一个通用的活动。
每个HTML内容meta标签是这样的。
< META NAME =视口CONTENT =WIDTH =设备的宽度,高度=设备的高度,最小规模为0.4,最大规模= 3,初始规模= 0.5>
和编程的WebView配置,以适应这些$ C $屏幕内容CS。
的WebView web视图=(的WebView)findViewById(R.id.webview1); webView.getSettings()setJavaScriptEnabled(真)。 。webView.getSettings()setLoadWithOverviewMode(真); 。webView.getSettings()setUseWideViewPort(真); webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); webView.setScrollbarFadingEnabled(真); 。webView.getSettings()setBuiltInZoomControls(真); 。webView.getSettings()setLoadsImagesAutomatically(真); webView.getSettings()setLightTouchEnabled(真)。 webView.getSettings()setDomStorageEnabled(真)。 webView.setBackgroundColor(0);
不幸的是既不元code和的WebView配置不会在屏幕上不适合的内容;但双攻适合的内容非常好。所以我不知道我可以可模拟双编程敲击的WebView?
解决方案 / ** * * /包com.y2cf.hoppr.utils.viewutils;进口android.content.Context;进口android.os.SystemClock;进口android.util.AttributeSet;进口android.util.Log;进口android.view.GestureDetector;进口android.view.MotionEvent;进口android.webkit.WebView;/ ** * @author拉杰什 * * /公共类MyWebView扩展的WebView { 私人GestureDetector gestureDetector; / ** * @参数方面 * / 公共MyWebView(上下文的背景下){ 超级(上下文); gestureDetector =新GestureDetector(上下文,新GestureListener()); // TODO自动生成构造函数存根 } / ** * @参数方面 * @参数ATTRS * / 公共MyWebView(上下文的背景下,ATTRS的AttributeSet){ 超(背景下,ATTRS); gestureDetector =新GestureDetector(上下文,新GestureListener()); // TODO自动生成构造函数存根 } / ** * @参数方面 * @参数ATTRS * @参数defStyle * / 公共MyWebView(上下文的背景下,ATTRS的AttributeSet,诠释defStyle){ 超(背景下,ATTRS,defStyle); gestureDetector =新GestureDetector(上下文,新GestureListener()); // TODO自动生成构造函数存根 } 公共无效simulateDoubleTap() { simulateDoubleTapEvent(0); simulateDoubleTapEvent(2); simulateDoubleTapEvent(2); simulateDoubleTapEvent(1); simulateDoubleTapEvent(0); } 私人无效simulateDoubleTapEvent(INT行动) { 长时间的停机= SystemClock.uptimeMillis(); 长EVENTTIME = SystemClock.uptimeMillis()+ 100; 浮动X = 0.0; 浮Y = 0.0; //元状态列表在这里找到:developer.android.com/reference/android/view/KeyEvent.html#getMetaState() INT亚状态= 0; MotionEvent我= MotionEvent.obtain( 停机时间, EVENTTIME, 行动, X, Y, 亚状态 ); dispatchTouchEvent(箱); } @覆盖 公共布尔onTouchEvent(MotionEvent事件){ // TODO自动生成方法存根 返回gestureDetector.onTouchEvent(事件); } 私有类GestureListener扩展GestureDetector.SimpleOnGestureListener { @覆盖 公共布尔onDown(MotionEvent五){ 返回true; } //事件时双击出现 @覆盖 公共布尔onDoubleTap(MotionEvent五){ 浮X = e.getX(); 浮Y = e.getY(); Log.d(枪王,在螺纹:(+ X +,+ Y +)); 返回true; } }}
创建一个这样的类并调用simulateDoubleTap()基准值确定方法。希望这将帮助,和你的WebView应该是这个类的一个实例。
I have a generic activity that contains a single webview to show different html based content.
Every html content has meta tag like this.
<meta name="viewport" content="width=device-width,height=device-height, minimum-scale=0.4, maximum-scale=3,initial-scale=0.5">
And WebView programmatically configured to fit content in screen with these codes.
WebView webView = (WebView) findViewById(R.id.webview1);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setUseWideViewPort(true);
webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
webView.setScrollbarFadingEnabled(true);
webView.getSettings().setBuiltInZoomControls(true);
webView.getSettings().setLoadsImagesAutomatically(true);
webView.getSettings().setLightTouchEnabled(true);
webView.getSettings().setDomStorageEnabled(true);
webView.setBackgroundColor(0);
Unfortunately neither meta code nor webview configurations doesn't fit content in screen; but double tapping fits content excellent. So i wonder can i simulate double tapping on webview programmatically?
解决方案/**
*
*/
package com.y2cf.hoppr.utils.viewutils;
import android.content.Context;
import android.os.SystemClock;
import android.util.AttributeSet;
import android.util.Log;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.webkit.WebView;
/**
* @author rajesh
*
*/
public class MyWebView extends WebView {
private GestureDetector gestureDetector;
/**
* @param context
*/
public MyWebView(Context context) {
super(context);
gestureDetector = new GestureDetector(context, new GestureListener());
// TODO Auto-generated constructor stub
}
/**
* @param context
* @param attrs
*/
public MyWebView(Context context, AttributeSet attrs) {
super(context, attrs);
gestureDetector = new GestureDetector(context, new GestureListener());
// TODO Auto-generated constructor stub
}
/**
* @param context
* @param attrs
* @param defStyle
*/
public MyWebView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
gestureDetector = new GestureDetector(context, new GestureListener());
// TODO Auto-generated constructor stub
}
public void simulateDoubleTap()
{
simulateDoubleTapEvent(0);
simulateDoubleTapEvent(2);
simulateDoubleTapEvent(2);
simulateDoubleTapEvent(1);
simulateDoubleTapEvent(0);
}
private void simulateDoubleTapEvent(int action)
{
long downTime = SystemClock.uptimeMillis();
long eventTime = SystemClock.uptimeMillis() + 100;
float x = 0.0f;
float y = 0.0f;
// List of meta states found here: developer.android.com/reference/android/view/KeyEvent.html#getMetaState()
int metaState = 0;
MotionEvent me = MotionEvent.obtain(
downTime,
eventTime,
action,
x,
y,
metaState
);
dispatchTouchEvent(me);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
return gestureDetector.onTouchEvent(event);
}
private class GestureListener extends GestureDetector.SimpleOnGestureListener {
@Override
public boolean onDown(MotionEvent e) {
return true;
}
// event when double tap occurs
@Override
public boolean onDoubleTap(MotionEvent e) {
float x = e.getX();
float y = e.getY();
Log.d("Double Tap", "Tapped at: (" + x + "," + y + ")");
return true;
}
}
}
Create a class like this and call simulateDoubleTap() methord. Hope this will help, and your webview should be an instance of this class.