Pergunta

Eu queria um teclado numérico que tivesse um botão GO ou feito que fechou e executou uma classe de cálculo. Graças a uma dica da Commonware sobre por onde começar, consegui isso funcionando lindamente no emulador. Então eu cheguei a carregá -lo no meu desejo de teste HTC e não funciona. Tenho certeza de que deve ser por causa do sentido da HTC ter seu próprio IME, mas certamente deve haver uma maneira de fazer com que isso funcione nos telefones HTC? Alguém mais conseguiu contornar esse problema?

Foi útil?

Solução

Eu posso replicar o que acho que você está vendo no HTC incrível.

Nem todos os teclados suaves suportarão o botão de ação IME. Alguns, como o "teclado" do graffiti, podem não ter nenhum botão, muito menos um botão de ação IME. Mesmo o Documento de definição de compatibilidade Diz nada sobre exigir um botão de ação para os teclados fornecidos com um dispositivo.

Portanto, você não deve confiar no botão de ação do IME. Se estiver lá, os usuários podem usá -lo. No entanto, sempre tenha algum outro meio de alcançar qualquer que seja o seu objetivo.

Outras dicas

Estou detectando se o botão Concluído / GO / Retorno foi pressionado usando um OneDitorActionListener, mas verificando opções e keyevents IME para cobrir os teclados HTC, bem como quaisquer teclados que aceitam opções IME.

(Este código funciona para os teclados incríveis da HTC, bem como qualquer teclado que tenha opções IME)

EditText.setOnEditorActionListener(new TextView.OnEditorActionListener(){
    public boolean onEditorAction(TextView exampleView, int actionId, KeyEvent event){
        if(actionId == EditorInfo.IME_ACTION_DONE 
            || actionId == EditorInfo.IME_NULL
            || event.getKeyCode() == KeyEvent.KEYCODE_ENTER){

            //Do something in here
            return true;
        } else {
            return false;
        }
    }
});

Eu estava usando um EditText com inputType = "número" e resolvi o problema modificando a solução da ASHA:

private TextView.OnEditorActionListener numberEnterListener = new TextView.OnEditorActionListener(){
        public boolean onEditorAction(TextView tv, int actionId, KeyEvent event){
            if(actionId == EditorInfo.IME_ACTION_DONE 
                || actionId == EditorInfo.IME_NULL
                || event.getKeyCode() == KeyEvent.KEYCODE_ENTER){

                tv.clearFocus();

                //Stupid keyboard needs to be closed as well
                InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(tv.getWindowToken(), 0);

                return true;
            } else {
                return false;
            }
        }
    };

O foco foi removido para parar de mostrar o bloco de números. O IMM era necessário porque um teclado suave ainda estava presente mesmo após a limpeza do foco.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top