11

समस्या डोमेन: Android WebView आधारित ePub प्रारूप पाठक -एंड्रॉयड 3.x केवल WebView पाठ चयन + जावास्क्रिप्ट

हम पाठ पर प्रकाश डाला जो JavaScript पद्धतियों के माध्यम से सुलभ हैं की जरूरत है (यानी, उन्हें मोड़ पर उन्हें बंद, उन्हें बचाने के उन्हें, आदि) जानकार

किसी को भी ईमेल, कृपया मुझे सही अगर मैं गलत हूँ: पाठ चयन के दौरान एक WebView पर -

असल में हम एक TextView उपरिशायी (WebTextView) जो कोई इन है सौंपी जाती हैं, अंतर्दृष्टि के अलावा अंतर्निहित एचटीएमएल से जुड़ा तरीका (इसे सब ठीक करने और इसे निर्बाध बनाने के लिए अच्छा काम, बीटीडब्ल्यू), ओ n जिसे हम TextSelectionActionMode और ClipboardManager निष्पादित करते हैं, परिणामों के साथ आपूर्ति की जाती है ... यह स्पष्ट करने के लिए, वेबव्यू के साथ वास्तविक HTML वास्तव में इस स्टॉक प्रक्रिया के दौरान किसी भी समय चयनित नहीं है, यही कारण है कि जावास्क्रिप्ट के परिणामों तक नहीं पहुंच सकता कार्य।

इसलिए इस व्यवहार को 3.1+ में काम करने के लिए, मेरे पास वेबव्यू पर अपना चयन लागू करने के लिए आगे बढ़ने की कुछ संभावित योजनाएं हैं - यह वह हिस्सा है जहां मैं सोच रहा हूं कि मैं अपने बारे में नहीं देख सकता कोने :) -

1) चयन मोड शुरू करने वाले लंबे क्लिक के MOTION_DOWN को कैप्चर करें, टेक्स्टस्लेक्शन एक्शनमोड में निर्मित ओवरराइड करें (क्लाइंट ब्रांडिंग का समर्थन करने के लिए - जिस तरह से मुझे ऐसा लगता है वह इतना हैकिश होता है) घड़ी ड्रैग करें, MOTION_UP स्थिति को कैप्चर करें, इन कॉर्ड को वेबव्यू पर मानचित्र करें, और मेरे चयन को कॉर्ड पर आधारित करें (क्लिपबोर्ड मैनेजर द्वारा कैप्चर किए गए पाठ की तुलना करते समय)

2) अपना खुद का "वेबटेक्स्टव्यू" (पूरे लॉटा वर्क लॉल) बनाएं और न ही-हैकिशली अपना एक्शनमोड बनाएं और उपरोक्त सभी को करें।

3) स्टॉक चयन प्रक्रिया द्वारा उत्पन्न मोशनवेन्ट्स का उपयोग करें और किसी भी तरह से स्टॉक द्वारा चयन किए गए टेक्स्टसेक्शन एक्शनमोड को ओवरराइड करें।

ये विकल्प मैं देख रहा हूँ कर रहे हैं उम्मीद है कि मेरी निकटता और हताशा इस के साथ एक सरल करने के लिए मुझे अंधा कर दिया है (पढ़ा है कि के रूप में निर्मित) समाधान या दो।

आपके समय के लिए फिर से धन्यवाद।

उत्तर

1

मुझे 100% यकीन नहीं है कि कौन से तरीके/गुण आपको रेंज और चयन देते हैं। मैंने दस्तावेज में कोई नहीं देखा। लेकिन मैं प्रतिबिंब का उपयोग कर चयनित श्रेणी को पिक्सेल में प्राप्त करने में सक्षम था। यकीन नहीं है कि यह किसी की मदद करता है, लेकिन सोचा कि यह यहां पोस्ट करने लायक था।

Region result = null; 
try { 
    Object[] params = null; 

    Method nativeGetSelectionRegion = WebView.class.getDeclaredMethod("nativeGetSelectionRegion"); 
    nativeGetSelectionRegion.setAccessible(true);  
    result = (Region)nativeGetSelectionRegion.invoke(this, params); 


    Log.i(TAG, "res: region " + result.getBounds().toShortString()); 

} catch (Exception e) { 
    e.printStackTrace(); 
} 

उम्मीद है कि मदद करता है कि किसी

संपादित करें: यह 3.1+

+0

भरोसेमंद प्रतिबिंब दर्दनाक है, कम से कम कहने के लिए ... भरोसेमंद जावास्क्रिप्ट समान रूप से दर्दनाक है (जैसा कि अब मुझे पता है, मेरा समाधान 4.0 के वेब व्यू में टूट गया है, जैसा कि मैं टाइप करता हूं "कैसे" पर काम करता हूं) जावास्क्रिप्ट में, document.getSelection() चयन ऑब्जेक्ट देता है, जिससे आप दस्तावेज़ शर्तों https://developer.mozilla.org/en/DOM/window में वास्तविक स्थान एकत्र कर सकते हैं।getSelection (यह दस्तावेज़ या विंडो इंटरफ़ेस पर लागू होता है) मैं एंड्रॉइड दुनिया में प्रतिबिंब के माध्यम से व्युत्पन्न कुछ भी भरोसा नहीं करता; काफी सरलता से, वे इसे तोड़ देंगे। यह सब कहा जा रहा है, यह एक अच्छा बैकअप योजना है जावास्क्रिप्ट विफल होना चाहिए! – Dan

+0

आप उस दस्तावेज़ को कैसे ट्रिगर कर रहे हैं .getSelection()? हमने मूल रूप से कोशिश की और पाया कि loadUrl ("जावास्क्रिप्ट: document.getSelection()") के माध्यम से जावास्क्रिप्ट लोड करना; चयन को स्पष्ट करने के कारण वहां कुछ भी नहीं था। – smokingoyster

+0

आपको जावास्क्रिप्ट के साथ वेबव्यू के अंदर भारी भारोत्तोलन करने की आवश्यकता है, और एक प्रासंगिक (मेरे मामले में) पाइप-सीमांकित स्ट्रिंग को उस प्रासंगिक डेटा के साथ लौटाएं जिसके बाद आप हैं। यानी, जावास्क्रिप्ट के भीतर जेनरेट किए गए "फ़्लैटेड" चयन ऑब्जेक्ट के लिए रिसीवर के रूप में जावास्क्रिप्ट इंटरफेस का उपयोग करें। इसके अलावा, आप उस डेटा के साथ क्या कर रहे हैं (मैंने रीयल-टाइम चयन के लिए मेरा उपयोग किया है) के आधार पर, ध्यान रखें कि UI थ्रेड पर डिलीवरी आवश्यक होगी (क्योंकि यह संभवतः यूआई थ्रेड पर नहीं होगा) तो एक हैंडलर पैटर्न, अच्छी तरह से, आसान हो सकता है ... – Dan

11

पर काम नहीं करता मैं 2.2 में यह काम कर रहे मिला - 4.0.3। मैंने जावास्क्रिप्ट इंटरफ़ेस का उपयोग किया और इसमें सभी स्पर्श पारित किए। समाधान बहुत अच्छी तरह से काम करता प्रतीत होता है और मैंने जिथब पर एक उदाहरण प्रोजेक्ट लगाया है। जिथब प्रोजेक्ट में संपत्ति फ़ोल्डर में आवश्यक जेएस के साथ-साथ एक टेस्ट पेज और वेब व्यू भी शामिल है जो परीक्षण पृष्ठ लोड करता है और चयन को संभालने के लिए सभी आवश्यक विधियों को लागू करता है। जिथूब प्रोजेक्ट का लिंक https://github.com/btate/BTAndroidWebViewSelection है। कोशिश करो।

+0

अच्छा, मैं विभिन्न जेएस पुस्तकालयों का उपयोग नहीं कर सका बड़े HTML पृष्ठों (हमारे ऐप्स के लिए विशिष्ट) लोड करते समय गति हिट, इसलिए मैंने जेएस को स्क्रैच से लिखना समाप्त कर दिया। – Dan

+0

इसे गिटहब, बीटीएटी पर पोस्ट करने के लिए धन्यवाद। – mikejonesguy

+3

@ बिट्टेट ऊपर जिथब प्रोजेक्ट ओएस संस्करण 4.1 + के लिए काम नहीं कर रहा है। – sachin003

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