返回介绍

1.9 AutoCompleteTextViewReflector

发布于 2024-12-23 21:07:34 字数 1219 浏览 0 评论 0 收藏 0

v7 包的 SearchView 使用了反射机制,通过反射拿到 AutoCompleteTextView 和 InputMethodManager 隐藏的方法。

  static final AutoCompleteTextViewReflector HIDDEN_METHOD_INVOKER = new AutoCompleteTextViewReflector();

  private static class AutoCompleteTextViewReflector {
    private Method doBeforeTextChanged, doAfterTextChanged;
    private Method ensureImeVisible;
    private Method showSoftInputUnchecked;

    AutoCompleteTextViewReflector() {
      
      /**
       * 省略部分代码
       */
      
      try {
        showSoftInputUnchecked = InputMethodManager.class.getMethod(
            "showSoftInputUnchecked", int.class, ResultReceiver.class);
        showSoftInputUnchecked.setAccessible(true);
      } catch (NoSuchMethodException e) {
        // Ah well.
      }
    }  
  
    /**
     * 省略部分代码
     */    
  
    void showSoftInputUnchecked(InputMethodManager imm, View view, int flags) {
      if (showSoftInputUnchecked != null) {
        try {
          showSoftInputUnchecked.invoke(imm, flags, null);
          return;
        } catch (Exception e) {
        }
      }

      //只有这个方法才有在 if 后面做处理
      // Hidden method failed, call public version instead
      imm.showSoftInput(view, flags);
    }    
  }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文