Voglio nascondere la tastiera virtuale quando faccio clic sul lato di editbox in una schermata. come posso fare questo?nascondi la tastiera di default al momento del clic in Android
risposta
Per nascondere forzatamente la tastiera si utilizzerà il seguente codice ... L'ho inserito in un metodo chiamato "hideSoftKeyboard()". Come accennato da Falmarri, la softkey dovrebbe nascondere quando si fa clic su di esso. Tuttavia, se chiami questo metodo in un 'onClick()' di un altro elemento, chiuderà forzatamente la tastiera.
private void hideSoftKeyboard(){
if(getCurrentFocus()!=null && getCurrentFocus() instanceof EditText){
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(yourEditTextHere.getWindowToken(), 0);
}
}
Non funziona dal 2015 – delive
Ho aggiunto quanto segue alla mia attività. Funziona perché toccare una vista focalizzabile non cambia la messa a fuoco (quindi w == v), ma il tocco sarà al di fuori del rettangolo della vista.
public boolean dispatchTouchEvent(MotionEvent event) {
View v = getCurrentFocus();
boolean ret = super.dispatchTouchEvent(event);
View w = getCurrentFocus();
int scrcoords[] = new int[2];
w.getLocationOnScreen(scrcoords);
float x = event.getRawX() + w.getLeft() - scrcoords[0];
float y = event.getRawY() + w.getTop() - scrcoords[1];
Log.d("Activity", "Touch event "+event.getRawX()+","+event.getRawY()+" "+x+","+y+" rect "+w.getLeft()+","+w.getTop()+","+w.getRight()+","+w.getBottom()+" coords "+scrcoords[0]+","+scrcoords[1]);
if (event.getAction() == MotionEvent.ACTION_UP && (x < w.getLeft() || x >= w.getRight() || y < w.getTop() || y > w.getBottom())) {
inputManager.hideSoftInputFromWindow(getWindow().getCurrentFocus().getWindowToken(), 0);
}
return ret;
}
[edit: correggere bug minore]
dovuto modificare questo per farlo funzionare. Aggiunto un controllo per vedere se la vista focalizzata è un EditText.
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
View v = getCurrentFocus();
boolean ret = super.dispatchTouchEvent(event);
if (v instanceof EditText) {
View w = getCurrentFocus();
int scrcoords[] = new int[2];
w.getLocationOnScreen(scrcoords);
float x = event.getRawX() + w.getLeft() - scrcoords[0];
float y = event.getRawY() + w.getTop() - scrcoords[1];
Log.d("Activity", "Touch event "+event.getRawX()+","+event.getRawY()+" "+x+","+y+" rect "+w.getLeft()+","+w.getTop()+","+w.getRight()+","+w.getBottom()+" coords "+scrcoords[0]+","+scrcoords[1]);
if (event.getAction() == MotionEvent.ACTION_UP && (x < w.getLeft() || x >= w.getRight() || y < w.getTop() || y > w.getBottom())) {
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getWindow().getCurrentFocus().getWindowToken(), 0);
}
}
return ret;
}
Potrebbe probabilmente essere eseguito in modo più agevole ma funziona davvero bene.
Per aggiungere un po 'di chiarezza - se stai cercando di chiudere la tastiera quando l'utente fa clic SEMPRE FUORI DA UN EDITTEXT, e non solo su onClick() di un altro pulsante, il codice di Daniel funziona perfettamente. Basta aggiungere/sovrascrivere il metodo alla tua attività e l'utente sarà in grado di chiudere la tastiera facendo clic in qualsiasi punto al di fuori di un EditText (funziona anche per più EditTexts su un singolo schermo). Grazie Daniele! –
Questa non è una risposta perfetta poiché nasconde la tastiera al tocco, non tocca. Se ad es. scorrere un po ', la tastiera sarà nascosta. Questo spesso non è voluto. – Ixx
@daniel grazie, questo è il genio – bibangamba
questo può essere fatto utilizzando il codice seguente:
1) Prendere un punto di riferimento del layout genitore in codice Java utilizzando findViewById().
2) quindi applicare setOnTouchListener() ad esso.
3) Aggiungere il seguente codice in onTouchMethod().
lin = (LinearLayout) findViewById(R.id.lin);
lin.setOnTouchListener(new OnTouchListener()
{
@Override
public boolean onTouch(View v, MotionEvent event)
{
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getWindow().getCurrentFocus().getWindowToken(), 0);
return false;
}
});
public boolean OutsideTouchEvent(MotionEvent m_event) {
View v = getCurrentFocus();
boolean value = super.dispatchTouchEvent(m_event);
View w = getCurrentFocus();
int scrcoords[] = new int[2];
w.getLocationOnScreen(scrcoords);
float x = m_event.getRawX() + w.getLeft() - scrcoords[0];
float y = m_event.getRawY() + w.getTop() - scrcoords[1];
if (m_event.getAction() == MotionEvent.ACTION_UP && (x < w.getLeft() || x >= w.getRight() || y < w.getTop() || y > w.getBottom())) {
InputMethodManager inputMethodManager = (InputMethodManager) YourActivity.this.getSystemService(Activity.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(YourActivity.this.getCurrentFocus().getWindowToken(), 0);
}
return value;
}
set InputType a zero per modificare il testo
editText.setInputType(0);
è un lavoro per me
Prima di tutto grazie a Daniel, il suo codice è veramente bello e mi stava usando per un po.
Recentemente ho capito che devo migliorarlo. Il problema era scorrere la pagina. Ho avuto molti EditText
s nel mio progetto e nascondeva la tastiera quando si scorre la pagina.
mi si avvicinò con una soluzione che utilizza onGestureListener
al posto di rilevante dispatchTouchEvent.
public class TabActivity extends ActionBarActivity implements GestureDetector.OnGestureListener {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
...
gestureScanner = new GestureDetector(TabActivity.this,this);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
gestureScanner.onTouchEvent(ev);
return super.dispatchTouchEvent(ev);
}
@Override
public boolean onSingleTapUp(MotionEvent event) {
View v = getCurrentFocus();
if (v instanceof EditText) {
View w = getCurrentFocus();
int scrcoords[] = new int[2];
w.getLocationOnScreen(scrcoords);
boolean hide = true;
View view = ((ViewGroup)findViewById(android.R.id.content)).getChildAt(0);
ArrayList<View> editTexts = view.getFocusables(0); // Get All EditTexts in view
for(int i=0; i< editTexts.size(); i++){
View editText = editTexts.get(i);
editText.getLocationOnScreen(scrcoords);
float x = event.getRawX();
float y = event.getRawY();
int viewX = scrcoords[0];
int viewY = scrcoords[1];
// If touch is in any of EditText, keep keyboard active, otherwise hide it.
if (event.getAction() == MotionEvent.ACTION_UP && (x > viewX && x < (viewX + editText.getWidth())) && (y > viewY && y < (viewY + editText.getHeight()))) {
hide = false;
}
}
if (hide) {
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getWindow().getCurrentFocus().getWindowToken(), 0);
}
}
return true;
}
@Override
public boolean onScroll(MotionEvent event, MotionEvent e2, float distanceX, float distanceY) {
return true;
}
}
Quindi, se l'utente scorre pagina va a onScroll
metodo e non fa nulla. Se gli utenti toccano semplicemente per scattare, attiva il metodo onSingleTapUp
.
Ho anche dovuto modificare la dichiarazione del codice di Daniel. Daniel stava controllando se l'evento di tocco fosse fuori dallo EditText
. Poiché ho molti EditViews
ho cambiato il codice per scoprire se l'evento di tocco è all'interno di uno qualsiasi di EditText
s.
Funziona bene con me, fammi sapere per qualsiasi tipo di miglioramento o errore.
View view = ((ViewGroup) findViewById (android.R.id.content)). GetChildAt (0); questa non l'ho capita . Mi spieghi? – Tara
Era un vecchio progetto su cui ho lavorato, non ricordo i dettagli. Fondamentalmente, quello che faccio è recuperare la vista genitore. 'android.R.id.content' ti darà la vista di root. 'getChildAt (0)' è probabilmente usato per recuperare genitore dei miei EditTexts. –
quindi intendi aggiungere tutto il testo di modifica nel gruppo di viste o nella vista interna? – Tara
Basta impostare il tipo di ingresso a null come quello
editText.setInputType(InputType.TYPE_NULL);
Come supplementare per la risposta accettata.
Se la risposta accettata non funziona per voi, è possibile aggiungere il metodo hideSoftKeyboard()
al metodo della onClickListener
del vostro EditText
onClick()
. Per esempio:
editText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
hideSoftKeyboard();
}
});
(inserire il codice sopra in onResume()
o da qualche altra parte)
ps. la definizione di hideSoftKeyboard()
private void hideSoftKeyboard(){
if(getCurrentFocus()!=null && getCurrentFocus() instanceof EditText){
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
}
}
Ho fatto una buona solution.I sanno che sia troppo tardi, ma quando si cerca il più delle volte ottenendo questo link come primo collegamento. quindi potrebbe essere utile per gli altri. Se si fa clic su qualsiasi testo/pulsante si nasconderà la tastiera che è già visibile.
date.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Hide soft keyboard
InputMethodManager imm = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);
// here i am showing the Date Dialog. one can proceed with their functionality
//show date picker dialog
showDialog(Date_DIALOG_ID);
}
});
- 1. Android: Nascondi tastiera dopo il clic del pulsante
- 2. Pulsante Disabilita al momento del clic
- 3. Android: AutoCompleteTextView nascondi tastiera virtuale
- 4. Avvio automatico JNLP al momento del clic
- 5. Nascondi pulsante del microfono Android tastiera virtuale
- 6. Android notifica al momento
- 7. ionic2 + angular2 - pulsante di disattivazione al momento del clic
- 8. Visualizzazione della tastiera al momento giusto iOS7
- 9. Nascondi la tastiera virtuale su Done Keypress in Android?
- 10. Nascondi tastiera software
- 11. Effetto bagliore/pulsate Javascript per fermarsi al momento del clic
- 12. Popup magnifico - Popup scomparendo al momento del clic
- 13. Angular2 - Aggiungi classe a elemento al momento del clic
- 14. jQuery UI selezionabile - deseleziona l'elemento selezionato al momento del clic
- 15. Cambia radio bootstrap al momento del click
- 16. NVD3 - Come aggiornare la funzione dati ai nuovi dati del prodotto al momento del clic
- 17. tastiera Nascondi Event con INDIETRO chiave
- 18. Come ottenere il valore del testo di input al momento del clic in ReactJS
- 19. Nascondi tastiera software non funzionante
- 20. textview Il colore di sfondo non cambia al momento del clic in popupwindow
- 21. nascondi tastiera ios
- 22. Nascondi la tastiera dopo le ricerche dell'utente?
- 23. drawer di navigazione nascondi tastiera quando onDrawerOpened
- 24. Nascondi automaticamente la tastiera virtuale in ViewPager.OnPageChangeListener onPageSelected()?
- 25. Mostra/nascondi tastiera software Android sul frammento sostituire
- 26. aprire un URL al clic del pulsante ok in Android
- 27. Default Tastiera AlphaNumeric iPad in modalità numerica
- 28. Al clic, nascondi div e rimuovi l'attributo richiesto
- 29. Tastiera Android premere overlay tastiera
- 30. Android Nascondi tastiera quando si sostituiscono i frammenti
Dovrebbe farlo automaticamente. Finché clicchi da qualche parte che non fa apparire la tastiera stessa – Falmarri
@Falmarri Inizialmente pensavo avessi ragione ma non sono in grado di farlo accadere sulla mia app di test. Scenario testato: 1) fai clic su una vista EditText che fa apparire la tastiera, 2) fai clic su una SeekBar nello stesso Frammento 3) fai clic su un RadioButton con focusable = true. Né 2 né 3 hanno chiuso la tastiera. Questo comportamento suggerito è documentato ovunque? – Nilzor