दिलचस्प पोस्ट
"हमारा" और "उनकी" का अर्थ git-svn के साथ उलट क्यों है स्विफ्ट में एक वैकल्पिक मूल्य क्या है? रूबी में स्ट्रिंग प्रक्षेप काम क्यों करता है जब कोई कर्ल ब्रेसिज़ नहीं होता है? निर्धारित करें कि क्या दो आयत एक-दूसरे को ओवरलैप करते हैं? कैसे Android में टोस्ट की स्थिति को बदलने के लिए? XAML पृष्ठों के बीच मान (पैरामीटर) कैसे पारित करें? एक्सएमएल ड्रॉएबल का उपयोग कर कार्यक्षेत्र लाइन 'बी' वर्ण स्ट्रिंग के सामने क्या करता है? मैं जावा में एक पूर्ण सरणी कैसे बदलूं? एक आइफ्रेम प्रतिक्रियाशील बनाना एक डिवा में फिट करने के लिए फ़ॉन्ट का आकार बदलना (एक पंक्ति पर) पायथन: जेसन.लोड्स 'यू' के साथ पूर्वनिर्धारित आइटम देता है यह निर्धारित करने के लिए कि क्या कोई प्रकार C # प्रतिबिंब के साथ एक इंटरफ़ेस लागू करता है विम में regex मैच छोड़कर सब कुछ निकालें कैसे उबुन्टू पर postgresql को पूरी तरह से शुद्ध और पुन: इंस्टॉल करें?

एंड्रॉइड: वेबव्यू से टेक्स्ट का चयन कैसे करें

मैं उपयोगकर्ता को वेबव्यू से कुछ ग्रंथों को चुनने की अनुमति देना चाहता हूं और उसे पाठ संदेश के रूप में भेजने की आवश्यकता है। pls पाठ का चयन करने के लिए रास्ता खोजने के लिए और क्लिपबोर्ड पर कॉपी और क्लिपबोर्ड से निकालने मैंने कई उदाहरण देखा लेकिन कुछ भी नहीं मुझे सचमुच … टीआईए

संपादित करें
@ orangmoney52 से लिंक में दिए गए कोड का उपयोग कर निम्नलिखित परिवर्तनों के साथ

getmethod के दूसरे पैरामीटर और विधि दूसरे पैरामीटर को आह्वान करें। अगर मैं शून्य दे तो चेतावनी आएगी .. जो सही है?

public void selectAndCopyText() { try { Method m = WebView.class.getMethod("emulateShiftHeld", Boolean.TYPE); m.invoke(BookView.mWebView, false); } catch (Exception e) { e.printStackTrace(); // fallback KeyEvent shiftPressEvent = new KeyEvent(0,0, KeyEvent.ACTION_DOWN,KeyEvent.KEYCODE_SHIFT_LEFT,0,0); shiftPressEvent.dispatch(this); } } 

यह त्रुटि प्राप्त हो रही है:

  05-26 16:41:01.121: WARN/System.err(1096): java.lang.NoSuchMethodException: emulateShiftHeld 

वेब के समाधान से एकत्रित समाधान "एंड्रॉइड: वेबव्यू से टेक्स्ट का चयन कैसे करें"

ऊपर दिए गए उत्तर बिल्कुल ठीक लगते हैं और ऐसा लगता है कि पाठ का चयन करते समय आपको कुछ याद आ रहा है तो आपको कोड को दोबारा जांचना होगा और वेबवर के किसी भी टच आविर्वर को ओवरराइड करना होगा।

मैं नीचे कोड की कोशिश की यह ठीक काम करता है …

फ़ंक्शन है

  private void emulateShiftHeld(WebView view) { try { KeyEvent shiftPressEvent = new KeyEvent(0, 0, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_SHIFT_LEFT, 0, 0); shiftPressEvent.dispatch(view); Toast.makeText(this, "select_text_now", Toast.LENGTH_SHORT).show(); } catch (Exception e) { Log.e("dd", "Exception in emulateShiftHeld()", e); } } 

जहाँ भी आप चाहें, विधि को ऊपर कॉल करें (आप एक बटन डाल सकते हैं और इस विधि को इसके क्लिक ईवेंट में बुला सकते हैं): emulateShiftHeld (mWebView);

चरण: 1 कस्टम वेबविव वर्ग बनाएं। यह वर्ग वेबव्यू पाठ पर लंबे प्रेस पर देशी एक्शन बार ओवरराइड करेगा। इसके अलावा यह एंड्रॉइड के विभिन्न संस्करण के लिए चयन केस को संभालता है (4.0 पर परीक्षण किया गया) यह कोड जावास्क्रिप्ट का उपयोग करके चयनित पाठ लेता है।

 public class CustomWebView extends WebView { private Context context; // override all other constructor to avoid crash public CustomWebView(Context context) { super(context); this.context = context; WebSettings webviewSettings = getSettings(); webviewSettings.setJavaScriptEnabled(true); // add JavaScript interface for copy addJavascriptInterface(new WebAppInterface(context), "JSInterface"); } // setting custom action bar private ActionMode mActionMode; private ActionMode.Callback mSelectActionModeCallback; private GestureDetector mDetector; // this will over ride the default action bar on long press @Override public ActionMode startActionMode(Callback callback) { ViewParent parent = getParent(); if (parent == null) { return null; } if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { String name = callback.getClass().toString(); if (name.contains("SelectActionModeCallback")) { mSelectActionModeCallback = callback; mDetector = new GestureDetector(context, new CustomGestureListener()); } } CustomActionModeCallback mActionModeCallback = new CustomActionModeCallback(); return parent.startActionModeForChild(this, mActionModeCallback); } private class CustomActionModeCallback implements ActionMode.Callback { @Override public boolean onCreateActionMode(ActionMode mode, Menu menu) { mActionMode = mode; MenuInflater inflater = mode.getMenuInflater(); inflater.inflate(R.menu.menu, menu); return true; } @Override public boolean onPrepareActionMode(ActionMode mode, Menu menu) { return false; } @Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) { switch (item.getItemId()) { case R.id.copy: getSelectedData(); mode.finish(); return true; case R.id.share: mode.finish(); return true; default: mode.finish(); return false; } } @Override public void onDestroyActionMode(ActionMode mode) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { clearFocus(); }else{ if (mSelectActionModeCallback != null) { mSelectActionModeCallback.onDestroyActionMode(mode); } mActionMode = null; } } } private void getSelectedData(){ String js= "(function getSelectedText() {"+ "var txt;"+ "if (window.getSelection) {"+ "txt = window.getSelection().toString();"+ "} else if (window.document.getSelection) {"+ "txt = window.document.getSelection().toString();"+ "} else if (window.document.selection) {"+ "txt = window.document.selection.createRange().text;"+ "}"+ "JSInterface.getText(txt);"+ "})()"; // calling the js function if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { evaluateJavascript("javascript:"+js, null); }else{ loadUrl("javascript:"+js); } } private class CustomGestureListener extends GestureDetector.SimpleOnGestureListener { @Override public boolean onSingleTapUp(MotionEvent e) { if (mActionMode != null) { mActionMode.finish(); return true; } return false; } } @Override public boolean onTouchEvent(MotionEvent event) { // Send the event to our gesture detector // If it is implemented, there will be a return value if(mDetector !=null) mDetector.onTouchEvent(event); // If the detected gesture is unimplemented, send it to the superclass return super.onTouchEvent(event); } 

}

चरण 2: WebView इंटरफ़ेस के लिए अलग कक्षा बनाएं। घटना के लिए इस वर्ग listnes एक बार जावास्क्रिप्ट कोड निष्पादित किया जा रहा है

 public class WebAppInterface { Context mContext; WebAppInterface(Context c) { mContext = c; } @JavascriptInterface public void getText(String text) { // put selected text into clipdata ClipboardManager clipboard = (ClipboardManager) mContext.getSystemService(Context.CLIPBOARD_SERVICE); ClipData clip = ClipData.newPlainText("simple text",text); clipboard.setPrimaryClip(clip); // gives the toast for selected text Toast.makeText(mContext, text, Toast.LENGTH_SHORT).show(); } } 

चरण 3: कस्टम मेनू में मेनू> एक्सएमएल> मेनू फ़ोल्डर में जोड़ें

 <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/copy" android:icon="@drawable/ic_action_copy" android:showAsAction="always" android:title="copy"> </item> <item android:id="@+id/share" android:icon="@drawable/ic_action_share" android:showAsAction="always" android:title="share"> </item> 

मैं इसे प्राप्त करने के लिए नीचे सूचीबद्ध कई लिंकों की मदद ली: आप लोगों के लिए धन्यवाद

वेबव्यू पर जावास्क्रिप्ट का उपयोग कैसे करें http://developer.android.com/guide/webapps/webview.html#UsingJavaScript

जावास्क्रिप्ट इंजेक्शन के लिए मैं एंड्रॉइड पर वेबवेस्टमेंट में इस जावास्क्रिप्ट को इंजेक्ट क्यों नहीं कर सकता?

ओवरराइडिंग डिफ़ॉल्ट एक्शन बार के लिए एंड्रॉइड वेबवॉउड ओएस 4.1+ का डिफ़ॉल्ट टेक्स्ट चयन ओवरराइड कैसे करें?

संस्करण 4.0 के लिए 4.3 पाठ चयन करने के लिए वेबदृश्य पाठ चयन समाशोधन नहीं

सबसे आसान तरीका है, हालांकि प्रति निर्माता / प्रतिलिपि लागू की गई प्रतिलिपि की तरह लगता है कि उतना सुंदर नहीं है, यह निम्न है:

https://bugzilla.wikimedia.org/show_bug.cgi?id=31484

मूल रूप से, यदि आप WebChromeClient webview.setWebChromeClient(...) जरिए अपना स्वयं का WebChromeClient सेट कर रहे हैं तो टेक्स्ट चयन डिफ़ॉल्ट रूप से अक्षम है। इसे सक्षम करने के लिए आपके WebChromeClient को लागू करने के लिए विधि लागू करने की आवश्यकता है:

 //@Override /** * Tell the client that the selection has been initiated. */ public void onSelectionStart(WebView view) { // Parent class aborts the selection, which seems like a terrible default. //Log.i("DroidGap", "onSelectionStart called"); } 

@ वेंसाटी, @ orangmoney52 से लिंक में दिए गए कोड का उपयोग करके, मैं कुछ महीने पहले इस समस्या को पूरा करने में सक्षम था। आप अपने मेनू में एक बटन बना सकते हैं जो आपको टेक्स्ट कॉपी करने की अनुमति देता है। इसके बाद, ऑन ऑप्शन्स आईटम में चुने गए, आपके पास इस तरह एक खंड हो सकता है:

  case R.id.select_and_copy: { Toast.makeText(getApplicationContext(), "Select Text", Toast.LENGTH_SHORT).show(); selectAndCopyText(); return true; }