Domanda

Ho un EditText che mostra il tempo. Dopo che l'utente fa clic sul EditText voglio mostrare un TimePickerDialog, così mi sono messo un View.OnClickListener al mio EditText.

Ma la OnClickListener si comporta stranamente - mi tocco il EditText e poi appare la tastiera software (che io non voglio). Quando tocco di nuovo, OnClickListener.onClick() viene finalmente chiamato e viene visualizzata la finestra di dialogo.

Cosa devo fare se voglio la finestra appaia immediatamente?

È stato utile?

Soluzione

A differenza di molti altri controlli, EditTexts sono attivabile mentre il sistema è in modalità 'touch'. Il primo evento click si concentra il controllo, mentre il secondo evento click in realtà spara il OnClickListener. Se si disattiva messa a fuoco touch-mode con l'attributo android:focusableInTouchMode View, il OnClickListener dovrebbe sparare come previsto.

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

Altri suggerimenti

Un'altra soluzione è quella di utilizzare il 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 ritorna true l'evento viene gestito e la tastiera pop-up abituato. Se ci si vuole far apparire la tastiera ancora e registrare cliccare avresti lo avete tornare false.

Sembra che non si desidera che l'utente sia effettivamente in grado di digitare l'EditText. Volete solo loro di essere in grado di scegliere un momento tramite un selettore di tempo. Allora, perché non solo un pulsante che apre una TimePickerDialog? Si potrebbe visualizzare il tempo che è stato raccolto in un TextView.

Oppure si può semplicemente sostituire la vista EditText con un TimePicker vista (non una finestra di dialogo, solo una vista normale).

Ho risolto questo utilizzando un pulsante personalizzato in questo modo:

<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" />

Invece di tocco utilizzo Listener Testo Cambio Listener:

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 ho capito bene basta qualcosa come

<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" />

non modificabile e cliccabile. Impostare la OnClickListener e il gioco è fatto. In teoria, nella pratica si dovrebbe aggiungere anche

android:editable="false" 

che è deprecato, ma fa il trucco.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top