bschandramohan
bschandramohan

Reputation: 2006

how to set input type to be numberdecimal but also allow a "-"

I have set input type to be numberdecimal but also want to populate the editText with a "-" programmatically. I can add the text but then I am unable to edit the text as it doesn't confirm to the number decimal format. Any idea on how I can say inputtype is numberdecimal but a "-" can be allowed?

Upvotes: 15

Views: 11243

Answers (6)

kiLLua
kiLLua

Reputation: 471

In my case, I just created a simple class that allows numbers and hyphen only.

private static class myFilter implements InputFilter {
    @Override
    public CharSequence filter(CharSequence source, int start, int end,
                               Spanned dest, int dstart, int dend) {
        // Allow digits and hyphen in the input
        String filters = "0123456789-";

        StringBuilder filteredStringBuilder = new StringBuilder();
        for (int i = start; i < end; i++) {
            char currentChar = source.charAt(i);
            if (filters.contains(String.valueOf(currentChar))) {
                filteredStringBuilder.append(currentChar);
            }
        }

        return filteredStringBuilder.toString();
    }
}

Then in the ActivityClass, to add filter to the EditText:

    EditText _eText;
    _eText = findViewById(R.id.editText);
    _eText.setInputType(InputType.TYPE_CLASS_TEXT);
    _eText.setFilters(new InputFilter[]{new myFilter()});

Upvotes: 0

RoyBS
RoyBS

Reputation: 1281

I managed to do that with:

android:inputType="number|numberSigned"    
android:digits="0123456789-"

Upvotes: 10

7hny
7hny

Reputation: 1021

I was able to achieve this behavior by setting digits xml attribute as follows:

<EditText
    ...
    android:inputType="number"
    android:digits="0123456789-"/>

Setting it up programatically (Set EditText Digits Programmatically):

weightInput.setKeyListener(DigitsKeyListener.getInstance("0123456789-"));

Upvotes: 39

I found a very easy solution:

editText.setKeyListener(new DigitsKeyListener(true, true));    

The first true is for whether is signed input, the second true is for decimal.
Hope that helps

Upvotes: 4

Martin
Martin

Reputation: 11875

You will have to write your own KeyListener. You could start by downloading the source of the NumberKeyListener and take it from there.

Martin

Upvotes: 2

Paresh Mayani
Paresh Mayani

Reputation: 128428

I am having one solution, which may helps you:

Suppose, You want to enter 2-3 numbers with "-" sign for e.g. 203-304-405.23-232.45,

then Allow user to enter this in EditText without setting any attributes. and then you can Separate each numbers with "split()" function , but be sure that there should be any separator sign in between the tokens.

then

 String tokens[];
 strInput = edittext1.getText.toString();
 tokens = strInput.split(",");

then you can work with each tokens separately as tokens[0], tokens[1], for example:

num1 = tokens[0];
num2 = tokens[1];

Hope this helps you.

Enjoy!!

Upvotes: 1

Related Questions