2012-03-28 14 views
7

エミュレータとGalaxy Nexusデバイスの両方で、この簡単なデモアプリケーションでは、1000ミリ秒以上の時間がかかり、チェックボックスを選択または選択解除します。私はjavascriptで私のアプリの大部分を書こうと思っていたので、ios/android/webでコードを再利用することができましたが、これは取引の中断者です。webviewを実行してアンドロイド4.0を許容レベルで実行させる方法はありますか?

(活性)

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> 

(WebViewのに装填されたHTML)

+0

私は、標準のブラウザまたはAndroid用のChromeを使用して、通常のWebブラウザで同じようなパフォーマンスが得られることに気付きました。 gmail.comに行き、ログアウトしたときにチェックボックスを選択または選択解除すると、「私を覚えている」をトグルしてもまだ1秒間かかります!これは狂っている... – davidjnelson

答えて

2
<html> 
<body> 

<input type="checkbox" /> 

</body> 
</html> 
:ここ

は私のコードであります

私はこれがあなたの上にあることを理解していますしかし、あなたはfastclick.jsを実装しようとすることができます:https://github.com/ftlabs/fastclick

私はかなりのプロジェクトでうまく使用しました。ページが説明するように:

...モバイルブラウザは、 ボタンをタップしてクリックイベントを発生させてから約300ms待機します。この理由は です。実際にダブルタップ を実行している場合はブラウザが待機しています。

同じことがwebview内のインタラクション(私が知る限り)になります。

関連する問題