есть ли способ заставить webview под управлением android 4.0 работать на приемлемом уровне?
Как на эмуляторе, так и на моем устройстве galaxy nexus, это простое демонстрационное приложение занимает целую 1000 миллисекунд или больше, чтобы выбрать или снять флажок. Я хотел написать большую часть моего приложения на javascript, чтобы я мог повторно использовать код через ios / android / web, но это не так.
Вот мой код:
(Деятельность)
package com.mycompanyname;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
import android.webkit.ConsoleMessage;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebSettings.RenderPriority;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import com.mycompanyname.R;
public class JavascriptListViewTestActivity extends Activity {
private JavascriptListViewTestActivity parent = this;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
WebChromeClient chrome = new WebChromeClient() {
@Override
public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
parent.showDialog(consoleMessage.message() + "n" + consoleMessage.lineNumber());
return true;
}
};
WebViewClient client = new WebViewClient() {
};
WebView webView = (WebView)findViewById(R.id.webView1);
webView.setWebChromeClient(chrome);
webView.setWebViewClient(client);
webView.getSettings().setJavaScriptEnabled(false);
webView.getSettings().setAllowFileAccess(false);
webView.getSettings().setAppCacheEnabled(false);
webView.getSettings().setBuiltInZoomControls(false);
webView.getSettings().setDatabaseEnabled(false);
webView.getSettings().setDomStorageEnabled(false);
webView.getSettings().setGeolocationEnabled(false);
webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(false);
webView.getSettings().setLightTouchEnabled(false);
webView.getSettings().setLoadWithOverviewMode(false);
webView.getSettings().setNavDump(false);
webView.getSettings().setNeedInitialFocus(false);
webView.getSettings().setPluginsEnabled(false);
webView.getSettings().setRenderPriority(RenderPriority.HIGH);
webView.getSettings().setSaveFormData(false);
webView.getSettings().setSavePassword(false);
webView.getSettings().setSupportMultipleWindows(false);
webView.getSettings().setSupportZoom(false);
webView.getSettings().setUseDoubleTree(false);
webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
String html = readText(R.raw.listview);
webView.loadData(html, "text/html", "UTF-8");
}
private void showDialog(String message)
{
AlertDialog alert = new AlertDialog.Builder(parent).create();
alert.setMessage(message);
alert.show();
}
private String readText(int resourceId)
{
InputStream is = this.getResources().openRawResource(resourceId);
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String readLine = null;
StringBuffer outputBuffer = new StringBuffer();
try
{
while ((readLine = br.readLine()) != null)
{
outputBuffer.append(readLine);
}
return outputBuffer.toString();
}
catch (Exception e) {
e.printStackTrace();
return "";
}
finally
{
// TODO: might throw - use IOUtils.close()
try
{
is.close();
br.close();
}
catch (IOException ex)
{
showDialog(ex.toString());
}
}
}
}
(XML-макет)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<WebView
android:id="@+id/webView1"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
(html, загруженный в webview)
<html>
<body>
<input type="checkbox" />
</body>
</html>
1 ответ:
Я понимаю, что этому уже больше года, но вы можете попробовать реализовать fastclick.js: https://github.com/ftlabs/fastclick
Я успешно использовал его в нескольких проектах. Как объясняет Страница:
...мобильные браузеры будут ждать примерно 300 мс с того момента, как вы нажимаете кнопку, чтобы запустить событие click. Причина этого такова что браузер ждет, чтобы увидеть, действительно ли вы выполняете двойное нажатие.
То же самое касается взаимодействия внутри webview (насколько я знаю).
Comments