如何禁用与应用程序选择的文本共享

时间:2018-07-16 10:36:30

标签: android webview android-edittext android-sharing

我的Android应用中有一个WebView和一些EditText。选择文本时,我可以选择共享此文本。 现在,我想在整个应用程序中禁用此文本共享功能。 最可靠的方法是什么?

1 个答案:

答案 0 :(得分:1)

对于网络视图,有一个很好的方法[setDisabledActionModeMenuItems][1],但仅适用于android sdk 24 +。

我像这样使用反射

  private void disableSelectedTextOptions() {
    // TODO Method setDisabledActionModeMenuItems should be called directly after project will be migrated to SDK 24+
    if (Build.VERSION.SDK_INT < 24) return;
    Method method = null;
    try {
      method = webSettings.getClass().getMethod("setDisabledActionModeMenuItems", int.class);
    } catch (NoSuchMethodException e) {
      e.printStackTrace();
      return;
    }
    try {
      method.invoke(webSettings,
          /*WebSettings.MENU_ITEM_SHARE*/ 1 |
          /*WebSettings.MENU_ITEM_WEB_SEARCH*/ 2 |
          /*WebSettings.MENU_ITEM_PROCESS_TEXT*/ 4);
    } catch (IllegalAccessException e) {
      e.printStackTrace();
    } catch (InvocationTargetException e) {
      e.printStackTrace();
    }
  }

对于和EditText,我使用这种方法删除了“共享”(和“翻译”):

public static void removeShareOption(TextView tv){
    tv.setCustomSelectionActionModeCallback(new ActionMode.Callback() {
        @Override public boolean onCreateActionMode(ActionMode mode, Menu menu) {
            return true;
        }

        @Override public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
            menu.removeItem(/*android.R.id.shareText*/0x01020035);
            menu.removeItem(/* Translate */0);
            return true;
        }

        @Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
            return false;
        }

        @Override public void onDestroyActionMode(ActionMode mode) {

        }
    });
}