2010-12-20 19 views
16

der editText verliert nicht den Fokus in meiner App, wenn ich es aus, es hat die orange Grenze alle Zeit und diese schwarze Linie Cursor .. Ich habe dies ein LinearLayout nach diesem um den editText : Stop EditText from gaining focus at Activity startup , damit es nicht beim Start der App konzentrieren bekommen ..editText verliert nicht den Fokus

dies ist mein Code:

final EditText et = (EditText)findViewById(R.id.EditText01); 

final InputMethodManager imm = (InputMethodManager) getSystemService(
    INPUT_METHOD_SERVICE); 

et.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     imm.showSoftInput(et, InputMethodManager.SHOW_IMPLICIT); 
    } 
}); 

et.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
    public void onFocusChange(View v, boolean hasfocus) { 
     if(hasfocus) { 
     imm.showSoftInput(et, InputMethodManager.SHOW_IMPLICIT); 
     } else { 
     imm.hideSoftInputFromWindow(et.getWindowToken(), 0); 
     } 
    } 
}); 

Aber es scheint nicht zu den onFocusChange Aufruf zu werden, wenn ich auf eine beliebige Stelle außerhalb des editText!

+2

Ich bin ziemlich genau das Gleiche. Soweit ich das beurteilen kann, wird onFocusChange() NICHT generiert, wenn der Fokus von einem EditText über ein Touch-Event auf einen anderen verschoben wird. Vielleicht funktioniert @Overriding onTouch() möglicherweise? Weiß nicht aus der Hand. –

+0

Problematisch ist dies. Jetzt müssen wir den Code von 'World \ {EditText}' modifizieren, damit der eine Editiertext funktioniert. Was zur Hölle ... – Bondax

Antwort

1

Erstellen Sie einen onClick Listener, möglicherweise in Ihrem XML-Layout auf Klicks im Hintergrund LinearLayout zu hören. Von hier aus können Sie .clearFocus() auf Ihrem EditText aufrufen, nachdem Sie es zu einer Instanzvariable der Aktivität gemacht haben, in der Sie arbeiten.

+1

gibt es keine .cancelFocus() Methode ... –

+2

Ich denke, ich meinte '.clearFocus()' – styler1972

15

Es ist einfach. Sie können die folgenden in Linearlayout oder andere setzen sonst:

android:focusableInTouchMode="true" 
+1

Dies ist eine gute Antwort. Ich habe dies in RelitiveLayout verwendet, so dass EditText keinen Fokus hat. +1 – Sevren

0

Sie können den Fokus von der EditText, entfernen, indem Sie den Fokus auf andere Feldeinstellung nach Aufruf der Methode.

Angenommen, ich habe den Fokus auf Zurück-Schaltfläche beim Klicken auf die Schaltfläche "Fertig" gesetzt, dann rufen Sie die Methode auf Zurück-Schaltfläche innerhalb Done-Taste Klicken Sie auf Listener.

Und Ihr Problem ist gelöst.

back.requestFocusFromTouch(); 
3

Aufschalten Activity.dispatchTouchEvent():

@Override 
public boolean dispatchTouchEvent(MotionEvent ev) { 
    if (ev.getAction() == MotionEvent.ACTION_DOWN) { 
     View view = getCurrentFocus(); 
     if (view != null && view instanceof EditText) { 
      Rect r = new Rect(); 
      view.getGlobalVisibleRect(r); 
      int rawX = (int)ev.getRawX(); 
      int rawY = (int)ev.getRawY(); 
      if (!r.contains(rawX, rawY)) { 
       view.clearFocus(); 
      } 
     } 
    } 
    return super.dispatchTouchEvent(ev); 
} 

Auf diese Weise, wenn jemand irgendwo klickt, haben Sie die Kontrolle, und es ist nur an einer Stelle im Code.

Verwandte Themen