Android - 如何在显示 activity 时自动显示输入法选择器?
Android - How do I display input method picker automaticly whenever activity is shown?
TLDR 版本:我想在输入法之间使用尽可能少的点击次数。 InputMethodManager.showInputMethodPicker()
在 MainActivty onResume()
中调用时不执行任何操作,但在添加到按钮时起作用。我想这个问题是由于调用 showInputMethodPicker()
时我的应用程序尚未在前台引起的。
override fun onResume() {
super.onResume()
SettingChanger.inputMethodPicker(this)
}
fun inputMethodPicker(context: Context) {
val imeManager: InputMethodManager = context.applicationContext.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
val bluetoothAdapter: BluetoothAdapter = BluetoothAdapter.getDefaultAdapter()
// current default input method (before change)
val inputMethodNameBeforeChange = Settings.Secure.getString(
context.contentResolver,
Settings.Secure.DEFAULT_INPUT_METHOD
)
// Brings up the keyboard picker
imeManager.showInputMethodPicker()
if (inputMethodNameBeforeChange.contains("swiftkey")) {
// Turn off bluetooth
bluetoothAdapter.disable()
} else {
// Turn on bluetooth
if (!bluetoothAdapter.isEnabled) {
val enableBtIntent = Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE)
context.startActivity(enableBtIntent)
}
}
}
长版:
我在 Android phone 中使用匈牙利语物理键盘,但我首选的虚拟键盘没有注册所有字符;然而,不同的是,所以每当我通过蓝牙连接物理键盘时,我必须 s 到不同的虚拟键盘,并在完成后再次返回。
更改输入法的选项深深地隐藏在设置中,所以我写了一个应用程序,它只需打开输入法选择器,然后——为了让我的生活更轻松——根据它打开蓝牙 on/off我即将使用的方法。
我希望输入法选择器自动弹出,但是当我从另一个地方 到我的应用程序时,我的 inputMethodPicker(context: Context)
函数 - 我在 onCreate()
中调用- 不显示输入法选择器,但在适当的时候显示蓝牙开启请求。如果我用我的应用程序在屏幕上锁定 phone 并再次解锁,输入法选择器会按预期弹出。
我的 inputMethodPicker(context: Context)
函数在附加到按钮时按预期工作。
我的猜测是这个问题是由于调用 showInputMethodPicker()
时我的应用程序还没有在前台造成的。
(我尝试创建一个主菜单小部件, 很好地执行了我的 inputMethodPicker(context: Context)
,但该函数什么也没做,我猜可能也是因为某些 foreground/background 问题。)
每当显示 activity 时,如何显示输入法选择器和蓝牙开启请求? (或点击我的主菜单小部件按钮时)
我的古怪技巧似乎奏效了,它稍微延迟了函数调用:
override fun onResume() {
super.onResume()
Handler().postDelayed({ SettingChanger.inputMethodPicker(this) }, 50)
}
TLDR 版本:我想在输入法之间使用尽可能少的点击次数。 InputMethodManager.showInputMethodPicker()
在 MainActivty onResume()
中调用时不执行任何操作,但在添加到按钮时起作用。我想这个问题是由于调用 showInputMethodPicker()
时我的应用程序尚未在前台引起的。
override fun onResume() {
super.onResume()
SettingChanger.inputMethodPicker(this)
}
fun inputMethodPicker(context: Context) {
val imeManager: InputMethodManager = context.applicationContext.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
val bluetoothAdapter: BluetoothAdapter = BluetoothAdapter.getDefaultAdapter()
// current default input method (before change)
val inputMethodNameBeforeChange = Settings.Secure.getString(
context.contentResolver,
Settings.Secure.DEFAULT_INPUT_METHOD
)
// Brings up the keyboard picker
imeManager.showInputMethodPicker()
if (inputMethodNameBeforeChange.contains("swiftkey")) {
// Turn off bluetooth
bluetoothAdapter.disable()
} else {
// Turn on bluetooth
if (!bluetoothAdapter.isEnabled) {
val enableBtIntent = Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE)
context.startActivity(enableBtIntent)
}
}
}
长版:
我在 Android phone 中使用匈牙利语物理键盘,但我首选的虚拟键盘没有注册所有字符;然而,不同的是,所以每当我通过蓝牙连接物理键盘时,我必须 s 到不同的虚拟键盘,并在完成后再次返回。
更改输入法的选项深深地隐藏在设置中,所以我写了一个应用程序,它只需打开输入法选择器,然后——为了让我的生活更轻松——根据它打开蓝牙 on/off我即将使用的方法。
我希望输入法选择器自动弹出,但是当我从另一个地方 到我的应用程序时,我的 inputMethodPicker(context: Context)
函数 - 我在 onCreate()
中调用- 不显示输入法选择器,但在适当的时候显示蓝牙开启请求。如果我用我的应用程序在屏幕上锁定 phone 并再次解锁,输入法选择器会按预期弹出。
我的 inputMethodPicker(context: Context)
函数在附加到按钮时按预期工作。
我的猜测是这个问题是由于调用 showInputMethodPicker()
时我的应用程序还没有在前台造成的。
(我尝试创建一个主菜单小部件, 很好地执行了我的 inputMethodPicker(context: Context)
,但该函数什么也没做,我猜可能也是因为某些 foreground/background 问题。)
每当显示 activity 时,如何显示输入法选择器和蓝牙开启请求? (或点击我的主菜单小部件按钮时)
我的古怪技巧似乎奏效了,它稍微延迟了函数调用:
override fun onResume() {
super.onResume()
Handler().postDelayed({ SettingChanger.inputMethodPicker(this) }, 50)
}