O inputType
numberDecimal
in EditText
usa o ponto '.' como separador decimal. Na Europa, é comum usar uma vírgula ','. Embora meu código de idioma esteja definido como alemão, o separador decimal ainda é o '.'
Existe uma maneira de obter a vírgula como separador decimal?
android
android-edittext
mseo
fonte
fonte
Respostas:
Uma solução alternativa (até o Google corrigir esse bug) é usar um
EditText
comandroid:inputType="numberDecimal"
eandroid:digits="0123456789.,"
.Em seguida, adicione um TextChangedListener ao EditText com o seguinte afterTextChanged:
fonte
Uma variação nas soluções de 'dígitos' oferecidas aqui:
Levando em conta o separador de localidade.
fonte
,
em seus teclados. Exemplos: teclado Samsung (KitKat).Máscara de moeda do código a seguir para EditText ($ 123,125.155)
Layout XML
Código
fonte
Este é um bug conhecido no Android SDK. A única solução alternativa é criar seu próprio teclado virtual. Você pode encontrar um exemplo de implementação aqui .
fonte
A resposta de Martins não funcionará se você estiver instanciando o EditText programaticamente. Fui em frente e modifiquei a
DigitsKeyListener
classe incluída da API 14 para permitir vírgula e ponto como separador decimal.Para usar isso, chame
setKeyListener()
oEditText
, por exemplo,No entanto, você ainda precisa usar o truque de Martin no local
TextChangedListener
onde substitui vírgulas por pontosfonte
você pode usar o seguinte para diferentes localidades
fonte
Você pode usar a seguinte solução alternativa para incluir também vírgula como uma entrada válida: -
Através do XML:
Programaticamente:
Desta forma, o sistema Android mostrará o teclado dos números e permitirá a entrada de vírgula. Espero que isso responda à pergunta :)
fonte
Para soluções Mono (Droid):
fonte
Você pode fazer o seguinte:
E então você poderia usar um filtro de entrada:
}
fonte
IMHO, a melhor abordagem para esse problema é usar apenas o InputFilter. Uma boa essência é aqui DecimalDigitsInputFilter . Então você pode apenas:
fonte
para localizar sua entrada use:
e depois adicione:
do que não se esqueça de substituir "," por "." então Float ou Double pode analisá-lo sem erros.
fonte
Todas as outras postagens aqui tinham grandes falhas, então aqui está uma solução que irá:
No XML:
Variável de classe:
No onCreate, localize o separador usado no código do idioma atual:
Também em Criar, use-o para atualizá-lo se você estiver carregando um valor atual:
Também emCriar, Adicionar ouvintes
editTextWatcher
exemplo doSomething (), converta em período padrão para manipulação de dados
fonte
O Android possui um formatador de números embutido.
Você pode adicionar isso ao seu
EditText
para permitir decimais e vírgulas:android:inputType="numberDecimal"
eandroid:digits="0123456789.,"
Em algum lugar do código, quando o usuário clica em salvar ou após a inserção do texto (use um ouvinte).
fonte
Decidi mudar a vírgula para pontilhar apenas durante a edição. Aqui está minha solução simples e complicada e relativa:
someDecimalFormatter usará vírgula ou ponto depende da localidade
fonte
Não sei por que suas respostas são tão complicadas. Se houver um erro no SDK, você deve substituí-lo ou dar a volta.
Eu escolhi a segunda maneira de resolver esse problema. Se você formatar sua sequência como
Locale.ENGLISH
e depois colocá-la emEditText
(mesmo como uma sequência vazia). Exemplo:String.format(Locale.ENGLISH,"%.6f", yourFloatNumber);
Perseguindo essa solução, seu resultado é compatível com o teclado mostrado. Em seguida, números flutuantes e duplos funcionam normalmente para linguagens de programação, com ponto em vez de vírgula.
fonte
Minha solução é:
Na atividade principal:
char separator =DecimalFormatSymbols.getInstance().getDecimalSeparator(); textViewPitchDeadZone.setKeyListener(DigitsKeyListener.getInstance("0123456789" + separator));
No arquivo xml:
android:imeOptions="flagNoFullscreen" android:inputType="numberDecimal"
e eu peguei o dobro no editText como uma String.
fonte
Posso confirmar que as correções propostas não funcionam nos IMEs da Samsung (pelo menos no S6 e S9) e talvez na LG. Eles ainda mostram um ponto como separador decimal, independentemente da localidade. Mudar para o IME do Google corrige isso, mas dificilmente é uma opção para a maioria dos desenvolvedores.
Também não foi corrigido no Oreo para esses teclados, pois é uma correção que a Samsung e / ou a LG precisam fazer e, em seguida, empurrar até seus aparelhos antigos.
Em vez disso, bifurquei o projeto do teclado numérico e adicionei um modo em que ele se comporta como um garfo IME : . Veja a amostra do projeto para obter detalhes. Isso funcionou muito bem para mim e é semelhante a muitos dos IMEs falsos de "entrada de PIN" que você vê nos aplicativos bancários.
fonte
Já passaram mais de 8 anos e estou surpreso, esse problema ainda não foi resolvido ... Lutei
com esse problema simples, pois a resposta mais votada por @Martin permite digitar vários separadores, ou seja, o usuário pode digitar "12 ,,, ,,, 12,1,, 21,2, "
Além disso, a segunda preocupação é que, em alguns dispositivos, a vírgula não é mostrada no teclado numérico (ou requer o pressionamento múltiplo de um botão de ponto)
Aqui está minha solução alternativa, que resolve os problemas mencionados e permite que o usuário digite '.' e ',', mas em EditText ele verá o único separador decimal que corresponde à localidade atual:
E o observador de texto:
fonte
Solução simples, faça um controle personalizado. (isso é feito no Android Xamarin, mas deve ser portado facilmente para java)
fonte
Você pode usar
inputType="phone"
, no entanto, nesse caso, você teria que lidar com vários,
ou.
estar presente, portanto, uma validação adicional seria necessária.fonte
Eu acho que essa solução é menos complexa do que as outras escritas aqui:
Dessa forma, quando você pressiona o '.' no teclado virtual nada acontece; somente números e vírgulas são permitidos.
fonte