Intereting Posts
Андроид запускает пользовательскую активность на кнопке поиска нажатой @ телефонной трубки Android – граница для кнопки Встроенная камера, используя дополнительный MediaStore.EXTRA_OUTPUT, сохраняет изображения дважды (в моей папке и по умолчанию) Как программно установить атрибут layout_align_parent_right кнопки в относительной компоновке? Событие галереи: «когда изображение центрировано» Структура «Грейдл» и «Мультипроект» Использует ли Google Maps Android MapView различные плитки разрешения для разных плотностей экрана? Как определить событие дрожания с помощью андроида? Отмена кнопки «Готово» в приложении «Календарь». Является ли она частью панели действий? В чем разница между отсоединением фрагмента и его удалением? Горизонтальный прокручиваемый текст в Android Как я могу получить расстояние между двумя точками по latlng? Android Studio ProGuard не работает Работа с unicode , как избавиться? Android / Java Получение net :: ERR_UNKNOWN_URL_SCHEME при вызове номера телефона с HTML-страницы в Android

Открыть пользовательский диалог при выборе текста веб-просмотра

Я использую код выбора текста в webview. Он работает очень хорошо, без каких-либо проблем. Но я хочу открыть собственный диалог вместо диалога по умолчанию. Я использую его ссылку ниже

Как переопределить выбор текста по умолчанию в Android-браузере os 4.1+?

Но он не работает для настраиваемого диалога.

Найти код ниже

public class CustomWebView extends WebView { private Context context; private ActionMode mActionMode; private ActionMode.Callback mSelectActionModeCallback; private GestureDetector mDetector; public CustomWebView(Context context) { super(context); this.context = context; WebSettings webviewSettings = getSettings(); webviewSettings.setJavaScriptEnabled(true); // add JavaScript interface for copy WebAppInterface webAppInterface = new WebAppInterface(context); addJavascriptInterface(webAppInterface, "JSInterface"); } public CustomWebView(Context context, AttributeSet attrs) { super(context, attrs); this.context = context; } public CustomWebView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); this.context = context; } // this will over ride the default action bar on long press @Override public ActionMode startActionMode(ActionMode.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 super.startActionMode(mActionModeCallback); } private class CustomActionModeCallback implements ActionMode.Callback { @Override public boolean onCreateActionMode(ActionMode mode, Menu menu) { MenuInflater inflater = mode.getMenuInflater(); inflater.inflate(com.depressiv.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); } } 

Код WebAppInterface

 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(); } } 

Solutions Collecting From Web of "Открыть пользовательский диалог при выборе текста веб-просмотра"