【问题标题】:Restrict/remove autofill option on long press of Edit text长按编辑文本时限制/删除自动填充选项
【发布时间】:2019-08-31 21:48:12
【问题描述】:

我有一个编辑文本,长按它我不希望自动填充选项包含在侧面复制、粘贴、选择等中

我尝试执行以下代码,但对我没有帮助

if (Build.VERSION.SDK_INT >= 26) {
            AutofillManager autofillManager = cxt.getSystemService(AutofillManager.class);
            if (null != autofillManager) {
                view.setImportantForAutofill(IMPORTANT_FOR_AUTOFILL_NO_EXCLUDE_DESCENDANTS);
                autofillManager.disableAutofillServices();
                autofillManager.cancel();
            }
        }

我希望不应该列出自动填充选项,但它与复制、粘贴、选择等一起列出

【问题讨论】:

    标签: android android-autofill-manager


    【解决方案1】:

    您可以通过自定义 EditText 类来做到这一点,只需要以下步骤:

    1) 扩展EditText 类,

    2) 覆盖isSuggestionsEnabled()return false

    3) 创建一个canPaste() 方法并返回false。这是方法隐藏。

    如果仍然无法正常工作,您也可以禁用 EditText 中的长按。

    mEditText.setLongClickable(false);
    

    并通过从这些方法返回 false 来禁用上下文菜单:

    mEditEext.setCustomSelectionActionModeCallback(new ActionMode.Callback() {
    
                public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
                    return false;
                }
    
                public void onDestroyActionMode(ActionMode mode) {                  
                }
    
                public boolean onCreateActionMode(ActionMode mode, Menu menu) {
                    return false;
                }
    
                public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
                    return false;
                }
            });
    

    【讨论】:

      【解决方案2】:

      答案与我在这里给出的几乎完全相同: https://stackoverflow.com/a/59870250/7729375

      唯一的区别是 removeItem 的目标 Id 现在是 android.R.id.autofill 并且它需要 API 26 (Android O) 的注解

      Java:

      ActionMode.Callback callback = new ActionMode.Callback() {
                  @Override
                  @TargetApi(26)
                  public boolean onCreateActionMode(ActionMode mode, Menu menu) {
                      if (menu != null) {
                          menu.removeItem(android.R.id.autofill);
                      }
                      return true;
                  }
      
                  @Override
                  public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
                      return true;
                  }
      
                  @Override
                  public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
                      return false;
                  }
      
                  @Override
                  public void onDestroyActionMode(ActionMode mode) {
      
                  }
              };
      
              mEditText.setCustomInsertionActionModeCallback(callback);
      
              mEditText.setCustomSelectionActionModeCallback(callback);
      

      科特林:

      val callback = object : ActionMode.Callback {
          override fun onActionItemClicked(mode: ActionMode?, item: MenuItem?): Boolean {
              return false
          }
      
          @TargetApi(Build.VERSION_CODES.O)
          override fun onCreateActionMode(mode: ActionMode?, menu: Menu?): Boolean {
              menu?.removeItem(android.R.id.autofill)
              return true
          }
      
          override fun onPrepareActionMode(mode: ActionMode?, menu: Menu?): Boolean {
              return true
          }
      
          override fun onDestroyActionMode(mode: ActionMode?) {}
      }
      

      然后在 EditText 中使用站点:

      fun preventPaste() {
          customInsertionActionModeCallback = callback
          customSelectionActionModeCallback = callback
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-08-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-14
        相关资源
        最近更新 更多