标签: inputmethodmanager

主要活动在销毁后不会被垃圾收集,因为它是间接由InputMethodManager引用的

我从这里开始关注"避免内存泄漏"一文.

然而,所提出的解决方案不能解决泄漏问题.我在Windows XP(SDK 2.3.1)上使用Android模拟器测试了这个.我倾倒堆并检查主要活动仍在堆中(我使用了MAT)

这是我做的:

  1. 使用HelloWorldActivity创建HelloWorld应用程序(它没有子视图)
  2. 运行模拟器并启动HelloWorld应用程序.
  3. 单击后退键关闭它.
  4. 导致DDMS和转储堆中的gc < - 这里我找到了HelloWorldActivity实例.
  5. "GC Roots的路径"显示了以下路径.

HelloWorldActivity < - PhoneWindow $ DecorView < - InputMethodManager

InputMethodManager是一个单例和三个引用DecorView的引用,它引用了HelloWorldActivity.

我无法理解为什么InputMethodManager仍然引用DecorView实例,即使在活动被销毁之后.

是否有任何方法可以确保主要活动在关闭之后被销毁并且GC能够?

android garbage-collection android-activity inputmethodmanager

34
推荐指数
1
解决办法
7145
查看次数

我可以在自定义应用内键盘上使用Android InputMethodManager吗?

InputMethodManager是一种应用程序可用于与系统键盘交互的服务.编辑EditText也喜欢用它来间接通知键盘变化(例如updateSelection).

我可以参考InputMethodManager这个

InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
Run Code Online (Sandbox Code Playgroud)

我的问题是,这似乎只适用于系统键盘.我可以使用InputMethodManager一个自定义应用程序内的键盘?如果只是一个孤立的应用程序我不在乎,但我在一个库中包括一个将在许多应用程序中使用的自定义键盘.我需要一种标准的方式让编辑器与键盘进行通信.

我是否必须编写自己的输入法管理器,或者是否有办法在InputMethodManager我的自定义应用内键盘中使用该标准?

更新

以下是一些线索,说明如果无法使用标准输入法管理器,我将如何实现自己的自定义输入法管理器.

keyboard android custom-keyboard inputmethodmanager

7
推荐指数
1
解决办法
656
查看次数

在Android应用程序中未定义InputMethodManager关键字

我试图使用以下代码隐藏用户单击按钮时的软键盘:

InputMethodManager imm = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
    imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);
Run Code Online (Sandbox Code Playgroud)

但是我收到一个错误:

InputMethodManager未定义

我想我需要添加一个import语句?如果是这样,有谁知道什么?或者我该如何解决这个问题?

android keyword inputmethodmanager

3
推荐指数
1
解决办法
3621
查看次数

showSoftInputFromInputMethod 已弃用 Android P API 28

showSoftInputFromInputMethod该类中的方法在InputMethodManagerAndroid P 中已弃用。根据文档,我们应该InputMethodService.requestShowSelf(int)在 Android P 及更高版本中使用该方法。

现在的问题是我们如何获得该类的参考InputMethodService。我尝试创建一个新对象并调用requestShowself()它,但它不起作用。

InputMethodService inputMethodService = new InputMethodService();
inputMethodService.requestShowSelf(0);
Run Code Online (Sandbox Code Playgroud)

我们如何使用建议的替代方案来替代 API 28 及更高版本的弃用?

android android-keypad android-input-method inputmethodmanager android-9.0-pie

3
推荐指数
1
解决办法
8165
查看次数

Android 12 忽略 showSoftInput,因为未提供 VIEW

我的应用程序在很多设备上运行良好。但自从在我自己的 Pixel 上升级到 Android 12 后,在调用 showSoftInput 或点击 Bottomsheet 中的 AppCompatEditText 时,会发生以下情况。

val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager;
imm.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT)
Run Code Online (Sandbox Code Playgroud)

Logcat 警告(应用程序中没有任何反应):

Ignoring showSoftInput() as view=androidx.appcompat.widget.AppCompatEditText{b5311a0 VFED..CL. .F.P..ID 84,0-996,118 #7f0900a7 app:id/et_bottomsheet aid=1073741827} is not served.
Run Code Online (Sandbox Code Playgroud)

我尝试了很多方法,例如请求焦点、使用 SHOW_FORCE 的 showSoftInput 但没有任何效果。

android android-appcompat android-edittext inputmethodmanager

3
推荐指数
1
解决办法
2616
查看次数