Android SpellChecker не работает, если клавиатура показывает - PullRequest
0 голосов
/ 11 ноября 2019

У меня есть простое действие, которое использует SpellCheckerSession, чтобы предложить аналогичное совпадение слова. но если клавиатура показывает spellChecker не работает. возможно, из-за клавиатуры тоже используется проверка орфографии.

Моя упрощенная операция:

    public class TestActivity extends AppCompatActivity  implements  SpellCheckerSession.SpellCheckerSessionListener{

    private SpellCheckerSession spellChecker;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);

        test();

    }

    void test() {
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                spellChecker.getSentenceSuggestions(new TextInfo[] {new TextInfo("bool")}, 4);
                test();

            }
        }, 2000);
    }

    @Override
    public void onGetSuggestions(SuggestionsInfo[] results) {}

    @Override
    public void onGetSentenceSuggestions(SentenceSuggestionsInfo[] results) {

        Log.i("tag", "results size: " + results.length);
        for (SentenceSuggestionsInfo result : results) {
            final int len = result.getSuggestionsCount();

            for (int j = 0; j < len; ++j) {
                int a = result.getSuggestionsInfoAt(j).getSuggestionsCount();
                Log.i("tag", "getSuggestionsCount : " + a);

                for (int i = 0; i < a; ++i) {
                    Log.i("tag", "Suggestion: " + result.getSuggestionsInfoAt(j).getSuggestionAt(i));
                }
            }
        }

    }

    @Override
    public void onResume() {
        super.onResume();
        final TextServicesManager tsm = (TextServicesManager)
                getApplicationContext().getSystemService(Context.TEXT_SERVICES_MANAGER_SERVICE);
        if (tsm != null) {
            spellChecker = tsm.newSpellCheckerSession(null, Locale.US, this, true);

        }
    }

    @Override
    protected void onPause() {
        super.onPause();
        if (spellChecker != null) {
            spellChecker.close();
        }
    }
}

В этом упражнении я вызываю getSentenceSuggestions каждые 2 секунды, чтобы проверить, работает ли он или нет. и в моем макете деятельности у меня есть EditText. после запуска приложения spellChecker работает и показывает предложение в logcat, но если щелкнуть на editText, чтобы отобразить keyboaar, spellChecker не работает и getSuggestionsCount показывает -1 в logcat. если скрыть клавиатуру, все работает.

1 Ответ

0 голосов
/ 11 ноября 2019

, добавив android:inputType="textNoSuggestions|textVisiblePassword" к EditText, решил эту проблему.

другим способом:

EditText editText = findViewById(R.id.edit_text);
    editText.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);

, если вы используете библиотеку, например панель поиска, и не имеете доступа к EditTextвид, может быть, это работает для вас:

EditText view = (EditText) getCurrentFocus();
            if (view != null) {
                view.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
            }
...