InputConnection.commitText(CharSequence text,int newCursorPosition)只能提交英文字符和数字?

我实现了一个名为RemoteInput的输入方法,只是扩展InputMethodService,没有InputViews而没有键盘。 当用户选择RemoteInput作为默认IME时, RemoteInput会将当前输入状态发送给其他设备,用户可以远程执行输入操作(使用我们的定制协议)。 输入完成后,在其他设备中输入的文本将被发送回当前设备,然后RemoteInput使用InputConnection.commitText (CharSequence text, int newCursorPosition)将文本提交到当前UI组件(例如EditText InputConnection.commitText (CharSequence text, int newCursorPosition)

当远程输入的文本是英文字符和数字时,它是完美的,但是当涉及到其他字符时,事情就出错了。 我发现InputConnection.commitText过滤了其他字符。 例如,我输入hello你好 ,只有hello成功提交。 和更多:

  • hello world ==> helloworld
  • hello,world!! ==> helloworld

你提出的任何事情都会有所帮助,在此先感谢你们。

这是我的代码:

 public class RemoteInput extends InputMethodService { protected static String TAG = "RemoteInput"; public static final String ACTION_INPUT_REQUEST = "com.aidufei.remoteInput.inputRequest"; public static final String ACTION_INPUT_DONE = "com.aidufei.remoteInput.inputDone"; private BroadcastReceiver mInputReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (ACTION_INPUT_DONE.equals(intent.getAction())) { String text = intent.getStringExtra("text"); Log.d(TAG, "broadcast ACTION_INPUT_DONE, input text: " + text); input(text); } } }; @Override public void onCreate() { super.onCreate(); registerReceiver(mInputReceiver, new IntentFilter(ACTION_INPUT_DONE)); } @Override public View onCreateInputView() { //return getLayoutInflater().inflate(R.layout.input, null); return null; } @Override public boolean onShowInputRequested(int flags, boolean configChange) { if (InputMethod.SHOW_EXPLICIT == flags) { Intent intent = new Intent(ACTION_INPUT_REQUEST); getCurrentInputConnection().performContextMenuAction(android.R.id.selectAll); CharSequence text = getCurrentInputConnection().getSelectedText(0); intent.putExtra("text", text==null ? "" : text.toString()); sendBroadcast(intent); } return false; } public void input(String text) { InputConnection inputConn = getCurrentInputConnection(); if (text != null) { inputConn.deleteSurroundingText(100, 100); inputConn.commitText(text, text.length()); } //inputConn.performEditorAction(EditorInfo.IME_ACTION_DONE); } @Override public void onDestroy() { unregisterReceiver(mInputReceiver); super.onDestroy(); } } 

如果您使用的是英语以外的语言,则需要使用Unicode。 您需要将Unicode字体附加到项目中,并将元素的字体(例如EditText)设置为您附加的字体。 请参阅以下内容,了解如何向应用添加自定义字体。

http://tharindudassanayake.wordpress.com/2012/02/25/use-sinhala-fonts-for-your-android-app/

第二种选择是根设备并安装所需的字体。