2012-03-28 11 views
7

दोनों एमुलेटर और मेरी गैलेक्सी नेक्सस डिवाइस पर, यह सरल डेमो ऐप चेकबॉक्स को चुनने या अचयनित करने के लिए पूरे 1000 मिलीसेकंड या अधिक समय लेता है। मैं जावास्क्रिप्ट में अपने अधिकांश ऐप को लिखना चाहता था ताकि मैं आईओएस/एंड्रॉइड/वेब पर कोड का पुन: उपयोग कर सकूं, लेकिन यह एक सौदा ब्रेकर है।क्या एक स्वीकार्य स्तर पर एंड्रॉइड 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> 

(एचटीएमएल वेबव्यू में लोड)

<html> 
<body> 

<input type="checkbox" /> 

</body> 
</html> 
+0

मैंने देखा कि मुझे मानक ब्राउज़र या एंड्रॉइड के लिए क्रोम का उपयोग करके एक नियमित वेब ब्राउज़र में एक ही भयानक प्रदर्शन मिलता है। gmail.com पर जा रहा है, और 'मुझे याद रखें' टॉगल करने के लिए लॉग आउट होने पर चेकबॉक्स को चुनना या अचयनित करना अभी भी एक पूरा दूसरा लेता है! यह पागल है... – davidjnelson

उत्तर

2
:

यहाँ मेरी कोड है

मुझे एहसास है कि यह एक आप पर है पुराना है, लेकिन आप fastclick.js को लागू करने का प्रयास कर सकते हैं: https://github.com/ftlabs/fastclick

मैंने इसे कुछ परियोजनाओं पर सफलतापूर्वक उपयोग किया है। पेज बताते हैं:

... मोबाइल ब्राउज़रों समय से लगभग 300 मि.से इंतजार करेंगे कि आप क्लिक करें घटना आग बटन टैप करें। इसका कारण है कि ब्राउजर यह देखने का इंतजार कर रहा है कि आप वास्तव में डबल टैप कर रहे हैं या नहीं।

एक वेबव्यू के भीतर बातचीत के लिए जाता है (जहां तक ​​मुझे पता है)।

संबंधित मुद्दे

 संबंधित मुद्दे