6

私はRemoteInputという入力メソッドを実装し、InputMethodService を拡張するだけで、InputView もキーボードもありません。ユーザーがRemoteInputをデフォルトの IME として選択すると、 RemoteInputは現在の入力ステータスを他のデバイスに送信し、ユーザーはリモートで入力アクションを実行できます (当社のカスタマイズされたプロトコルを使用)。入力が完了すると、他のデバイスで入力されたテキストが現在のデバイスに送り返され、RemoteInput は を使用してテキストを現在の 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();
    }
}
4

1 に答える 1

-2

英語以外の言語を使用している場合は、Unicode を使用する必要があります。プロジェクトに Unicode フォントを添付し、要素の書体 (EditText など) を添付したフォントに設定する必要があります。アプリにカスタム フォントを追加する方法については、以下を参照してください。

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

2 番目のオプションは、デバイスをルート化して必要なフォントをインストールすることです。

于 2013-09-19T07:51:49.753 に答える