Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
<img src="https://i.stack.imgur.com/NT6zO.png" height="16" width="18" alt="" class="sponsor tag img">kotlin 设置DigitKeyListener时,十进制分隔键不可见_<img Src="https://i.stack.imgur.com/NT6zO.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">kotlin_Android_Kotlin_Android Edittext - Fatal编程技术网 kotlin 设置DigitKeyListener时,十进制分隔键不可见,kotlin,android,kotlin,android-edittext,kotlin,Android,Kotlin,Android Edittext" /> kotlin 设置DigitKeyListener时,十进制分隔键不可见,kotlin,android,kotlin,android-edittext,kotlin,Android,Kotlin,Android Edittext" />

kotlin 设置DigitKeyListener时,十进制分隔键不可见

kotlin 设置DigitKeyListener时,十进制分隔键不可见,kotlin,android,kotlin,android-edittext,kotlin,Android,Kotlin,Android Edittext,我希望允许用户根据区域使用十进制分隔符(逗号或点)输入数字 现在,我使用digitskeylister启用逗号作为某些地区(例如波兰、德国)的分隔符 val separator=DecimalFormatSymbols.getInstance().decimalSeparator editTextValue.keyListener=DigitsKeyListener.getInstance(“-0123456789$separator”) 这段代码是用英文写的 若软件键盘是Gboard或其他第

我希望允许用户根据区域使用十进制分隔符(逗号或点)输入数字

现在,我使用
digitskeylister
启用逗号作为某些地区(例如波兰、德国)的分隔符

val separator=DecimalFormatSymbols.getInstance().decimalSeparator
editTextValue.keyListener=DigitsKeyListener.getInstance(“-0123456789$separator”)
这段代码是用英文写的

若软件键盘是
Gboard
或其他第三方键盘,则一切正常,用户可以使用逗号或点作为分隔符

但当用户使用普通键盘并设置了
DigitsKeyListener
时,并非所有键都可见,并且用户无法添加分隔符

这是我的编辑文本代码:


val separator=DecimalFormatSymbols.getInstance().decimalSeparator
//editTextValue.keyListener=DigitsKeyListener.getInstance(“-0123456789$separator”)
注释带有
DigitsKeyListener
的行时,分隔符的键可见,但唯一可用的分隔符是dot


你知道如何在股票键盘上用逗号作为分隔符吗?

我曾经遇到过同样的问题。三星设备上的普通键盘太可怕了。。。没有办法用逗号显示数字键盘

我找到的最佳解决方案就是通过
TextWatcher

但仅当默认区域设置的小数分隔符是逗号时

允许在
数字中同时使用点(.)和逗号(,),并在XML中将inputType设置为
numberDecimal

<EditText
        android:id="@+id/editText_price"
        android:layout_marginLeft="8dp"
        android:layout_marginStart="8dp"
        android:digits="1234567890,."
        android:imeOptions="actionDone"
        android:inputType="numberDecimal" />
然后,要获得字符串的实际数目,请使用以下命令:

try {
    val price = DecimalFormat.getInstance().parse(editTextPrice.text.toString());
} catch (e: ParseException) {
    e.printStackTrace()
    editText_price.setError(getString(R.string.error))
}
问题是当使用带有接受字符字符串的getInstance时。由于KeyListener会覆盖EditText的输入类型,因此设置KeyListener后,EditText现在具有inputType number,而不是numberDecimal或numberSigned

由于DigitsKeyListener非常有用,一个简单的修复方法是简单地委托给它,但使用正确的输入类型。在科特林,这非常简单:

class DecimalSignedDigitsKeyListener(digitsKeyListener: DigitsKeyListener) : 
    KeyListener by digitsKeyListener {

  override fun getInputType() =
    InputType.TYPE_CLASS_NUMBER or 
    InputType.TYPE_NUMBER_FLAG_DECIMAL or 
    InputType.TYPE_NUMBER_FLAG_SIGNED
}


val separator = DecimalFormatSymbols.getInstance().decimalSeparator
val digitsKeyListener = DigitsKeyListener.getInstance("<your digits>")
editTextValue.keyListener = DecimalSignedDigitsKeyListener(digitsKeyListener)
class DecimalSignedDigitsKeyListener(digitsKeyListener:digitsKeyListener):
digitsKeyListener的KeyListener{
重写getInputType()=
输入TYPE.TYPE\u类别\u编号或
InputType.TYPE\u数字\u标志\u十进制或
InputType.TYPE\u编号\u标志\u签名
}
val separator=DecimalFormatSymbols.getInstance().decimalSeparator
val digitsKeyListener=digitsKeyListener.getInstance(“”)
editTextValue.keyListener=DecimalSignedDigitsKeyListener(digitsKeyListener)

我建议除了任何特定于语言环境的分隔符外,始终接受“.”,因为并非所有键盘都会显示逗号或其他符号。

public class main活动扩展了活动{

private EditText editText;
private String blockCharacterSet = "~#^|$%&*!";

private InputFilter filter = new InputFilter() {

    @Override
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {

        if (source != null && blockCharacterSet.contains(("" + source))) {
            return "";
        }
        return null;
    }
};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    editText = (EditText) findViewById(R.id.editText);
    editText.setFilters(new InputFilter[] { filter });
}
}

private EditText editText;
private String blockCharacterSet = "~#^|$%&*!";

private InputFilter filter = new InputFilter() {

    @Override
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {

        if (source != null && blockCharacterSet.contains(("" + source))) {
            return "";
        }
        return null;
    }
};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    editText = (EditText) findViewById(R.id.editText);
    editText.setFilters(new InputFilter[] { filter });
}