Domanda Come uso InputType = numberDecimal con il softkey "telefono"?


Per un EditText casella, l'utente deve inserire solo numeri validi, quindi sto usando android:inputType="numberDecimal". Sfortunatamente, la tastiera virtuale visualizzata da Android ha numeri solo lungo la riga superiore, mentre le tre righe successive presentano vari altri simboli (segno di dollaro, segno di percentuale, punto esclamativo, spazio, ecc.). Dal momento che il numberDecimal accetta solo i numeri 0-9, il segno negativo e il punto decimale, sarebbe più logico utilizzare la tastiera virtuale "telefono" (0-9 in una griglia 3x3, oltre ad altri simboli). Ciò renderebbe i pulsanti più grandi e più facili da colpire (poiché è una griglia 4x4 piuttosto che una griglia 10x4 nella stessa area dello schermo). Sfortunatamente, usando android:inputType="phone" consente caratteri non numerici come parentesi

Ho tentato di usare android:inputType="numberDecimal|phone", ma il numberDecimal l'aspetto del bit flag sembra essere ignorato. Ho anche provato a usare android:inputType="phone" in combinazione con android:digits="0123456789-.", ma che consente comunque più segni negativi o punti decimali (inputType="number" ha davvero un buon controllo degli errori per cose del genere, e non permetterà nemmeno all'utente di digitarli). Ho anche provato a usare android:inputType="phone" nel file di layout xml, mentre si utilizza a DigitsKeyListener nel codice java, ma poi usa solo la tastiera virtuale con il numero predefinito (quella che ha numeri solo lungo la riga superiore) (sembra impostare InputType.TYPE_CLASS_NUMBER, che annulla il InputType.TYPE_CLASS_PHONE impostato dal layout xml).

La scrittura di un IME personalizzato non funzionerebbe, poiché l'utente dovrebbe selezionare l'IME come opzione globale all'esterno dell'app.

C'è un modo per usare la tastiera soft di stile "telefono" mentre si usano anche le restrizioni "numeriche" su cosa viene inserito?


19
2018-05-13 22:10


origine


risposte:


Ho avuto lo stesso problema. Questo funziona per me:

<item name="android:inputType">numberDecimal</item>
<item name="android:digits">0123456789.</item>

Spero che questo ti aiuti.


18
2017-11-29 04:11



Finora, ciò che ho deciso di fare è estendere il DigitsKeyListener e sovrascrivere getInputType () in modo che restituisca InputType.TYPE_CLASS_PHONE. Questo mi consente di usare il pratico filtro () in DigitsKeyListener, ma allo stesso tempo usare la tastiera virtuale TYPE_CLASS_PHONE. Sono nuovo alla programmazione Android, ma sembra funzionare senza rompere nulla. Il codice è qualcosa del genere:

import android.text.method.DigitsKeyListener;
import android.text.InputType;
public class CustomDigitsKeyListener extends DigitsKeyListener
{
    public CustomDigitsKeyListener() {
        super(false, false);
    }

    public CustomDigitsKeyListener(boolean sign, boolean decimal) {
        super(sign, decimal);
    }

    public int getInputType() {
        return InputType.TYPE_CLASS_PHONE;
    }
}

C'è qualcosa di sbagliato in questo (passando il ritorno di getInputType () a qualcosa che la superclasse non intendeva)?


7
2018-05-14 20:47



Basta usare la tastiera del telefono e controllare l'input da soli. Non è una condizione molto grande per verificare se l'input è una cifra valida tra 0 e 9.


1
2018-05-14 07:19



Il codice Adam Dunn funziona perfettamente, ma non mostra come implementare la classe

import android.text.method.DigitsKeyListener;
import android.text.InputType;
public class CustomDigitsKeyListener extends DigitsKeyListener
{
    public CustomDigitsKeyListener() {
        super(false, false);
    }

    public CustomDigitsKeyListener(boolean sign, boolean decimal) {
        super(sign, decimal);
    }

    public int getInputType() {
        return InputType.TYPE_CLASS_PHONE;
    }
}

quindi devi istanza come questa

MyTextView.setKeyListener(new CustomDigitsKeyListener(true,true));

1
2018-02-27 18:33



Prova a usare android:numeric="integer" nella tua vista EditText.


0
2018-06-23 20:20