Определить тип языка в edittext android Pie? - PullRequest
0 голосов
/ 13 мая 2019

Я хочу определить, какой язык набирается пользователем в тексте редактирования, таком как хинди или английский, потому что я создаю приложение, такое как приложение SMS, и здесь я делаю текстовый счетчик, который работает в соответствии с типом языка edittext, который означает, что если язык является английским счетчиком Показывает 160 символов или язык, если счетчик хинди показывает 60 символов. Я могу сделать пользовательский счетчик с помощью textwatcher, но здесь я не могу определить язык редактирования текста.

Я пытался:

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
        InputMethodSubtype ims = imm.getCurrentInputMethodSubtype();
        String localeString = ims.getLocale();
        Locale locale = new Locale(localeString);
        String currentLanguage = locale.getDisplayLanguage();

но это ничего не дает в Logcat. и когда я использую это.

Log.d(TAG, "messageTYPE: " + Locale.getDefault().getDisplayLanguage());

Он показывает только английский каждый раз, когда я вхожу в хинди.

Что я хочу?

Если я могу определить тип языка, я могу создать собственный счетчик для редактирования текста.

OR

Можно ли редактировать текст, например, приложение для сообщений, которое автоматически определяет тип языка и устанавливает счетчик в соответствии с языком.

Пожалуйста, помогите мне, ребята, заранее спасибо.

UPDATE

if(s.length() < 160 || s.length() == 160){
            if (s.length()/160 == 0) {
                Log.d(TAG, "length160 " + s.length());
                Log.d(TAG, "length160 " + (160-s.length()));
                textViewCounter.setText((160 - s.length()) + "/" + "1");
                messageCount =1;
                Toast.makeText(SendingActivity.this, "length160: " + messageCount, Toast.LENGTH_SHORT).show();

            }else if (s.length()/160 == 1){
                textViewCounter.setText((160 - s.length()) + "/" + "1");
                messageCount =1;
                Toast.makeText(SendingActivity.this, "length1602: " + messageCount, Toast.LENGTH_SHORT).show();
            }
        }else if (s.length() > 160 && s.length() <= 305){
//          textViewCounter.setText((305 - s.length()) + "/" + "2");
//          messageCount = s.length()/160;
//          Toast.makeText(SendingActivity.this, "above " + messageCount, Toast.LENGTH_SHORT).show();

            if (s.length()/305 == 0) {
                Log.d(TAG, "length305 " + s.length());
                Log.d(TAG, "length305 " + (305-s.length()));
                textViewCounter.setText((305 - s.length()) + "/" + "2");
                messageCount = 2;
                Toast.makeText(SendingActivity.this, "length305: " + messageCount, Toast.LENGTH_SHORT).show();

            }else if (s.length()/305 == 1){
                textViewCounter.setText((305 - s.length()) + "/" + "2");
                messageCount = 2;
                Toast.makeText(SendingActivity.this, "length3052: " + messageCount, Toast.LENGTH_SHORT).show();
            }
        }else if (s.length() > 305 && s.length() <= 459){
//                                        textViewCounter.setText((305 - s.length()) + "/" + "2");
//                                        messageCount = s.length()/160;
//                                        Toast.makeText(SendingActivity.this, "above " + messageCount, Toast.LENGTH_SHORT).show();

            if (s.length()/459 == 0) {
                Log.d(TAG, "length459 " + s.length());
                Log.d(TAG, "length459 " + (459-s.length()));
                textViewCounter.setText((459 - s.length()) + "/" + "3");
                messageCount = 3;
                Toast.makeText(SendingActivity.this, "length459: " + messageCount, Toast.LENGTH_SHORT).show();

            }else if (s.length()/305 == 1){
                textViewCounter.setText((459 - s.length()) + "/" + "3");
                messageCount = 3;
                Toast.makeText(SendingActivity.this, "length4592: " + messageCount, Toast.LENGTH_SHORT).show();
            }
        }

Это пользовательский счетчик для подсчета слов и создания похожих сообщений.

1 Ответ

1 голос
/ 13 мая 2019

Используйте SmsMessage.calculateLength() (см. документы ), чтобы вычислить количество оставшихся символов:

editText.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            int[] result = SmsMessage.calculateLength(s, false);
            textViewCounter.setText("" + result[2] + "/" + result[0]);
            messageCount = result[0];
            Log.i("TAG", "Characters: " + result[1] + "/" + (result[1] + result[2]));
            Log.i("TAG", "Number of SMS's: " + result[0]);
        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });
...