Frage InputConnection.commitText (CharSequence text, int newCursorPosition) kann nur englische Zeichen und Zahlen eingeben?


Ich implementiere eine Eingabemethode namens RemoteInput Erweitern Sie einfach InputMethodService, ohne InputViews und keine Tastaturen. Wenn Benutzer auswählen RemoteInput als Standard-IME, RemoteInput sendet den aktuellen Eingabestatus an ein anderes Gerät und der Benutzer kann die Eingabe remote durchführen (unter Verwendung unseres kundenspezifischen Protokolls). Wenn die Eingabe abgeschlossen ist, wird der in einem anderen Gerät eingegebene Text an das aktuelle Gerät zurückgeschickt, und RemoteInput schreibt den Text dann mit der aktuellen UI-Komponente (z. B. EditText) fest InputConnection.commitText (CharSequence text, int newCursorPosition).

Es funktioniert perfekt, wenn ferninputed Text englische Zeichen und Zahlen sind, aber wenn es um andere Charaktere geht, gehen Dinge schief. Ich habe das gefunden InputConnection.commitText Andere Zeichen filtern Zum Beispiel habe ich eingezogen hello你好, nur hello erfolgreich vermittelt werden. Und mehr:

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

Alles, was Sie darüber erzählen, ist hilfreich, danke im Voraus.

Hier ist mein Code:

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();
    }
}

6
2018-03-14 09:17


Ursprung


Antworten:


Wenn Sie eine andere Sprache als Englisch verwenden, müssen Sie Unicode verwenden. Sie müssen Ihre Unicode-Schriftart an Ihr Projekt anhängen und die Schriftart des Elements (z. B. EditText) an die von Ihnen angehängte Schriftart anpassen. Im Folgenden finden Sie Informationen zum Hinzufügen benutzerdefinierter Schriftarten zu Ihrer App.

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

Die zweite Option besteht darin, Ihr Gerät zu rooten und die erforderliche Schriftart zu installieren.


-2
2017-09-19 07:51