10

So che il codice per respingere tyhe tastiera in Android èNascondi tastiera in Android mentre si tocca fuori Edit Text Area

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0); 

Qualcuno mi può suggerire un metodo per nascondere la tastiera se tocchiamo l'area esterna del testo area diversa dalla tastiera sullo schermo.

+2

Il codice sembra buono. Ciò costringerà la tastiera a essere nascosta in tutte le situazioni. In alcuni casi si passa 'InputMethodManager.HIDE_IMPLICIT_ONLY' come secondo parametro per assicurarsi di nascondere la tastiera solo quando l'utente non ha forzato esplicitamente la visualizzazione (tenendo premuto il menu) –

+0

checkout la mia risposta http://stackoverflow.com/ questions/4165414/how-to-hide-soft-keyboard-on-android-after-click-outside-edittext/36786783 # 36786783 – Uzair

risposta

15

Codice di licenziare SoftKeyboard è qui sotto:

public static void hideSoftKeyboard(Activity activity) { 
    InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE); 
    inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0); 
} 

Puoi mettilo in Utility Class o se lo stai definendo all'interno di un'attività, evita il parametro activity, o chiama hideSoftKeyboard (questo).

È possibile scrivere un metodo che itera su ogni vista dell'attività e controllare se si tratta di un'istanza di EditText se non è registrato un setOnTouchListener per quel componente e tutto andrà a posto. Nel caso ti stia chiedendo come farlo, in realtà è piuttosto semplice. Ecco cosa fai, scrivi un metodo ricorsivo come il seguente.

public void setupUI(View view) { 

    //Set up touch listener for non-text box views to hide keyboard. 
    if(!(view instanceof EditText)) { 

     view.setOnTouchListener(new OnTouchListener() { 

      public boolean onTouch(View v, MotionEvent event) { 
       hideSoftKeyboard(); 
       return false; 
      } 

     }); 
    } 

    //If a layout container, iterate over children and seed recursion. 
    if (view instanceof ViewGroup) { 

     for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) { 

      View innerView = ((ViewGroup) view).getChildAt(i); 

      setupUI(innerView); 
     } 
    } 
} 

chiamare questo metodo dopo SetcontentView() con PARAMETRI come id della vista come:

RelativeLayoutPanel android:id="@+id/parent"> ... </RelativeLayout> 

Quindi chiamare setupUI(findViewById(R.id.parent))

+0

Cool answer .... :) –

+12

copia di http://stackoverflow.com/questions/4165414/how-to-hide-soft-keyboard-on-android-after-click-outside-edittext – Gaurav

+0

Mentre, la migliore risposta nel suddetto collegamento era questa: http://stackoverflow.com/a/19828165/609782 Meno codice, nessuna iterazione. – Darpan

7

miglior modo possibile uso è pulsante Done oltre EditText rendere il vostro onClickListener fare come,

done.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View arg0) { 
     InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
     imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0); 
} 
}); 
6

Questo può essere vecchio, ma ho ottenuto questo lavoro da implenting una classe personalizzata

public class DismissKeyboardListener implements OnClickListener { 

    Activity mAct; 

    public DismissKeyboardListener(Activity act) { 
     this.mAct = act; 
    } 

    @Override 
    public void onClick(View v) { 
     if (v instanceof ViewGroup) { 
      hideSoftKeyboard(this.mAct); 
     } 
    }   
} 

public void hideSoftKeyboard(Activity activity) { 
     InputMethodManager imm = (InputMethodManager) 
     getSystemService(Activity.INPUT_METHOD_SERVICE); 
     imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0); 
} 

il migliore p qui il ractice consiste nel creare una classe Helper e ogni layout Relativo/Lineario di un contenitore dovrebbe implementarlo.

**** Prendere nota solo il contenitore principale dovrebbe implementare questa classe (Per l'ottimizzazione) ****

e realizzare in questo modo:

Parent.setOnClickListener(new DismissKeyboardListener(this)); 

la parola questo è per attività. quindi se sei su frammento lo usi come getActivity();

--- pollici se ti aiuta ... --- evviva Ralph ---

Problemi correlati