我的应用程序只是一个显示特定网站的 WebView。用户无法简单地使用 Chrome 应用程序,因为 Android 中的固有编程会改变点击功能。
为简单起见,假设网站显示一个日历,并且在该日历上是框。这些框可以单击以选中或双击以打开以显示事件详细信息。
该网站具有处理单击或双击事件时要执行的操作的代码:
<div class="boardpiece clickable" onclick="select(event, this);" ondblclick="open('5657849');"
我完全可以使用长按来模拟双击。这就是我的困惑开始的地方。如何告诉我的应用当用户对项目执行 SingleTap 时,它需要激活网站要求的“onclick”?我还需要告诉应用程序,当用户在同一项目上执行长按时,激活您在网站编码中看到的“ondblclick”事件?
这是我的活动代码:
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.webkit.SslErrorHandler;
import android.net.http.SslError;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.GestureDetector;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.MotionEvent;
public class MainActivity extends Activity{
WebView webview;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webview = (WebView) findViewById(R.id.webview);
//Do we want/need to enable Java?
webview.getSettings().setJavaScriptEnabled(true);
//Here we allow for zoom controls - pinch
webview.getSettings().setBuiltInZoomControls(true);
//Here we remove the zoom control buttons - requires API 11
webview.getSettings().setDisplayZoomControls(false);
//Here we clear the Cache and SSL Preferences
webview.clearCache(true);
webview.clearSslPreferences();
//Do we need to enable scroll bars to allow people to scroll left and right?
webview.setHorizontalScrollBarEnabled(true);
webview.setVerticalScrollBarEnabled(true);
webview.setWebViewClient(new WebViewClient());
webview.loadUrl("https://website");
final GestureDetector gd = new GestureDetector(new MyGestureDetector());
View.OnTouchListener gl = new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
return gd.onTouchEvent(event);
}
};
webview.setOnTouchListener(gl);
}
class MyGestureDetector extends SimpleOnGestureListener {
@Override
public boolean onDoubleTap(MotionEvent e) {
Log.i("", "DoubleTap");
return true;
}
public boolean onSingleTap(MotionEvent e) {
Log.i("", "SingleTap");
return true;
}
}
// Ignore SSL certificate errors
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed();
}
//Would like to have a Menu Button to refresh the page - or really just bring you to the login page - for use when the session times out
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(1, 1, 0, "Reload");
//getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()){
case R.id.reload:
webview.loadUrl("website");
return true;
}
return super.onOptionsItemSelected(item);
}
}