Java 在edittext android Pie中检测语言类型?

Java 在edittext android Pie中检测语言类型?,java,android,android-edittext,counter,Java,Android,Android Edittext,Counter,我想检测用户在编辑文本(如印地语或英语)中键入的语言,因为我正在制作一个应用程序(如SMS应用程序),这里我正在制作一个文本计数器,它根据编辑文本语言类型工作,这意味着如果语言为英语,计数器显示160个字符,或者语言为印地语,计数器显示60个字符。我可以自定义在textwatcher的帮助下计数器,但在这里我无法检测到编辑文本的语言 我试过: 但它在Logcat中没有给出任何信息。 当我用这个的时候 Log.d(TAG, "messageTYPE: " + Locale.ge

我想检测用户在编辑文本(如印地语或英语)中键入的语言,因为我正在制作一个应用程序(如SMS应用程序),这里我正在制作一个文本计数器,它根据编辑文本语言类型工作,这意味着如果语言为英语,计数器显示160个字符,或者语言为印地语,计数器显示60个字符。我可以自定义在textwatcher的帮助下计数器,但在这里我无法检测到编辑文本的语言

我试过:

但它在Logcat中没有给出任何信息。 当我用这个的时候

Log.d(TAG, "messageTYPE: " + Locale.getDefault().getDisplayLanguage());
每当我输入印地语字符时,它只显示英语

我想要什么?

如果我能够检测到语言类型,那么我可以为编辑文本创建一个自定义计数器

有没有办法使编辑文本一样的消息应用程序,这是自动检测语言类型和设置计数器根据语言

请帮帮我,伙计们,提前谢谢

更新

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();
            }
        }
if(s.length()<160 | | s.length()==160){
如果(s.length()/160==0){
Log.d(标签“length160”+s.length());
Log.d(标记“length160”+(160-s.length());
textViewCounter.setText((160-s.length())+“/”+“1”);
messageCount=1;
Toast.makeText(SendingActivity.this,“length160:+messageCount,Toast.LENGTH_SHORT).show();
}如果(s.length()/160==1),则为else{
textViewCounter.setText((160-s.length())+“/”+“1”);
messageCount=1;
Toast.makeText(SendingActivity.this,“length1602:+messageCount,Toast.LENGTH\u SHORT).show();
}

}否则,如果(s.length()>160和&s.length()305和&s.length()使用
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) {

        }
    });

短信大小限制为140字节。您可以检查不属于7位GSM编码的字符(如),并相应更改字符限制。我无法将您的答案与我的问题联系起来。您正在尝试检测键盘语言。但是,如果键盘为英语,但用户粘贴了一些印地语文本,会发生什么情况?我认为如果文本为7位GSM编码,计数器应显示160,如果不是,计数器应显示70。您能帮助我如何实现该l逻辑。?是否根据语言设置计数器??是。
result[1]+result[2]
如果
editText
仅包含英文字符,则为160;如果它包含其他字符(印地语、西里尔文等),则为70。您能帮我做更多的事情吗?如果是,我将更新我的答案。您能描述一下result[1]和result[2]result[1]是什么吗使用的代码单位数,结果[2]是下一条消息之前剩余的代码单位数(请参阅)。总和
result[1]+result[2]
是每条消息的字符总数(根据文本的不同为160或70)。
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) {

        }
    });