Pergunta

eu tenho um EditText Isso mostra tempo. Depois que o usuário clica no EditText Eu quero mostrar um TimePickerDialog, então eu defino um View.OnClickListener para o meu EditText.

Mas o OnClickListener está se comportando estranhamente - eu toco o EditText E o teclado do software aparece (que eu não quero). Quando eu toco de novo, OnClickListener.onClick() é finalmente chamado e a caixa de diálogo é exibida.

O que devo fazer se quiser que a caixa de diálogo apareça imediatamente?

Foi útil?

Solução

Ao contrário da maioria dos outros controles, EditTextS são focados enquanto o sistema está no 'modo de toque'. O primeiro evento de clique concentra o controle, enquanto o segundo evento de cliques realmente dispara o OnClickListener. Se você desativar o foco no modo de toque com o android:focusableInTouchMode Ver atributo, o OnClickListener deve disparar conforme o esperado.

<EditText
        android:text="@+id/EditText01"
        android:id="@+id/EditText01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:focusableInTouchMode="false" />

Outras dicas

Outra solução é usar o ontouchlistener:

edittext.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if(MotionEvent.ACTION_UP == event.getAction()) {
            mQuaternion_1.setText("" + mQ1);
        }

        return true; // return is important...
    }
});

Se retornar true O evento é tratado e o teclado não será pop -up. Se você deseja que o teclado ainda apareça e se registre, clique em você retornar false.

Parece que você não quer que o usuário realmente possa digitar no EditText. Você só quer que eles possam escolher um tempo através de um seletor de tempo. Então, por que não apenas um botão que aparece um timepickerdialog? Você pode exibir o tempo que foi escolhido em uma visão de texto.

Ou você pode apenas substituir a vista EdittExt por um Timepicker Visualização (não uma caixa de diálogo, apenas uma visualização regular).

Eu resolvi isso usando um botão personalizado como este:

<Button
        android:id="@+id/btTime"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center_vertical"
        android:text="test"
        android:textSize="20dp"
        android:background="@android:drawable/edit_text" />

Em vez de o ouvinte de toque, use o ouvinte, altere o ouvinte:

editText.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            //yourFunction();
        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });

Se eu entendi corretamente, você só precisa de algo como

<EditText android:text="@+id/EditText01" android:id="@+id/EditText01"
    android:layout_width="wrap_content" android:layout_height="wrap_content"
    android:clickable="true" android:inputType="none" />

Não editável e clicável. Colocou o OnClickListener E você terminou. Em teoria, na prática que você deve adicionar também

android:editable="false" 

que está depreciado, mas faz o truque.

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