2012-01-13 17 views
5

के माध्यम से चयनित टेक्स्ट प्राप्त करना वेबव्यू में चयनित टेक्स्ट प्राप्त करने के लिए difficult माना जाता है क्योंकि वेबव्यू टेक्स्ट चयन वास्तव में एक निजी वर्ग, WebTextView द्वारा संभाला जाता है।किसी वेबव्यू में एक प्रासंगिक क्रिया बार

हालांकि, हाल ही में जारी Android 4.0 Design guidelines के साथ, प्रासंगिक क्रिया सलाखों (सीएबी) के माध्यम से इसे प्राप्त करने की आशा की चमक की प्रतीत होती है। यह says:

जब भी आप उपयोगकर्ता को लंबे प्रेस के माध्यम से डेटा चुनने की अनुमति देते हैं तो सीएबी का उपयोग करें। आप उस क्रिया को सम्मिलित करने के लिए सीएबी की एक्शन सामग्री को नियंत्रित कर सकते हैं, जिसे आप उपयोगकर्ता को करने में सक्षम होना चाहते हैं।

क्या मैं इसे गलत व्याख्या कर रहा हूं? क्या सीएबी के माध्यम से वेबव्यू से चयनित टेक्स्ट पुनर्प्राप्त करने का कोई तरीका है?

एक लंबे क्लिक और टेक्स्ट चयन मोड शुरू होने के बाद, मैं वर्तमान में पता लगा सकता हूं कि ActionMode मूल प्रतिलिपि/पेस्ट Menu प्रारंभ और संशोधित करता है; हालांकि, मैं वास्तव में चयनित पाठ को पुनर्प्राप्त करने का तरीका नहीं समझ सकता।

+0

हे @ ऑक्टोपी, क्या आप कृपया मुझे बता सकते हैं कि जब आप एक्शनमोड शुरू करते हैं और आपने मेनू को कैसे संशोधित किया है तो आप वास्तव में कैसे पता लगा सकते हैं? मैंने जो हासिल किया वह एक लंबे क्लिक का पता लगा रहा है और एक्शनमोड शुरू कर रहा है, 'एक्शनमोड.कॉलबैक' के माध्यम से एक कस्टम बार प्रदान कर रहा है, लेकिन यह टेक्स्ट चयन कर्सर प्रदर्शित नहीं करेगा। – davids

+0

@ डेविड। चयन कहने के बिना, मैं यह भी जानना चाहता हूं कि मेनू को दोष या संशोधित कैसे किया जाए। यदि आपको टेक्स्ट चयन के अलावा 'एक्शनमोड' का उपयोग करने की आवश्यकता नहीं है तो मेरे पास काफी बदसूरत कामकाज है। मैं गतिविधि पर 'सार्वजनिक एक्शनमोड ऑनविंडो स्टार्टिंगएक्शनमोड (एक्शनमोड.कॉलबैक कॉलबैक)' ओवरराइड करता हूं। कहें 'वापसी सुपर .onWindowStartingActionMode (नया MyActionModeCallback()); '। यह काम करता है और कर्सर गायब नहीं होते हैं। हालांकि, मुझे नहीं पता कि इस कामकाज का दुष्प्रभाव क्या होगा। मैं सोच सकता हूं कि यह प्रणाली हमें नहीं करना चाहता है। – Yeung

+0

@Yeung मुझे एक्शनबार को ओवरराइड करने की भी आवश्यकता है, लेकिन चयन हैंडल की आवश्यकता है – Ravi

उत्तर

8

आप अभी तक वर्तमान API के साथ ऐसा नहीं कर सकते हैं।

मैं इस के लिए एक सुविधा का अनुरोध दायर - अंक 24,841: WebView अनुप्रयोगों एक कस्टम प्रासंगिक कार्यवाही बार http://code.google.com/p/android/issues/detail?id=24841

असल में, 4.0 में WebView अपनी ही प्रासंगिक कार्यवाही बार (सीएबी) hardcoded गया है की आपूर्ति के लिए अनुमति चाहिए। उस सीएबी के पास वेबव्यू पर एक संदर्भ है और उस संदर्भ के साथ, यह चयनित टेक्स्ट प्राप्त कर सकता है। मुझे यकीन नहीं है कि आप एक्शनमोड को मेनू शुरू करने और संशोधित करने में कैसे सक्षम थे, लेकिन यदि आप यह सब करने में सक्षम थे, तो आप अटक गए हैं क्योंकि getSelection() वर्तमान में पैकेज-निजी है। मैंने इसे एक अलग मुद्दे के रूप में दायर किया और इसे उपरोक्त पिछले मुद्दे से जोड़ा।

+0

अभी भी इसके लिए कोई फिक्स नहीं है? – clu

0

आप चयनित पाठ प्राप्त करने के लिए जावास्क्रिप्ट का उपयोग कर सकते हैं: window.getSelection(), और परिणाम को वापस करने के लिए WebView के addJavascriptInterface फ़ंक्शन का उपयोग करें।

+1

यह काम नहीं करेगा। कृपया मूल प्रश्न – johnoodles

+0

@johnnoodles पढ़ें क्या आप वाकई हैं?मैं वर्तमान में वेबव्यू में चयनित टेक्स्ट प्राप्त करने के लिए निम्न की तरह कुछ उपयोग करता हूं: 'wvWebView.loadUrl ("जावास्क्रिप्ट: if0.textOut (document.getSelection()। ToString());");' जहां 'if0' जावास्क्रिप्ट इंटरफेस है एक विधि 'textOut (स्ट्रिंग एस) '। यह मेरे लिए ठीक काम करता है (हालांकि मुझे अभी भी अन्य समस्याएं हैं) - क्या यह अनुरोधित कार्यक्षमता का कुछ हिस्सा तोड़ देता है जिसे मैंने याद किया है? क्या समस्या यह है कि यह विधि सीएबी के माध्यम से सख्ती से नहीं है? – Erhannis

0

आपकी जानकारी के लिए धन्यवाद, मैंने एक कठिन समस्या हल की है .. मैं बस कुछ फ़ंक्शन एक्शनमोड में जोड़ना चाहता हूं। मेरा कोड निम्नलिखित है, दूसरों के लिए सहायक हो सकता है।

@Override 
public ActionMode onWindowStartingActionMode(Callback callback) { 
    // TODO Auto-generated method stub 
    ActionMode mode = super.onWindowStartingActionMode(callback); 
    mode.getMenuInflater().inflate(R.menu.actions, mode.getMenu()); 
    mode.getMenu().findItem(R.id.action_add).setOnMenuItemClickListener(new OnMenuItemClickListener() { 

     @Override 
     public boolean onMenuItemClick(MenuItem item) { 
      // TODO Auto-generated method stub 
      Log.i("", "onMenuItemClick add "); 
      return false; 
     } 
    }); 
    return mode; 
} 
+0

विंग चेन, उत्तर संदर्भ से बाहर है। कृपया वास्तविक प्रश्न पढ़ें। – Adnan

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