setSoftInputMode rispetto a InputMethodManager

3

Ho visto e utilizzato entrambi i metodi per nascondere la tastiera sullo schermo durante la codifica di Android:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

e

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

Ho letto la documentazione per entrambi e non sono ancora chiaro come ciascuno di essi sia diverso, lo stesso, che è un metodo o una pratica migliore da usare e quale dovrebbe essere utilizzato in quali situazioni.

Ecco un estratto dalla .setSoftInputMode documentazione :

Specify an explicit soft input mode to use for the window, as per WindowManager.LayoutParams.softInputMode. Providing anything besides "unspecified" here will override the input mode the window would normally retrieve from its theme.

Ed ecco un estratto dalla InputMethodManager documentazione che sembra dire quasi la stessa cosa:

You can also control the preferred soft input state (open, closed, etc) for your window using the same windowSoftInputMode attribute.

More finer-grained control is available through the APIs here to directly interact with the IMF and its IME -- either showing or hiding the input area, letting the user pick an input method, etc.

Quindi qual è la differenza tra queste due opzioni per nascondere la tastiera virtuale di Android e se ne ricava un vantaggio rispetto all'altra? Uno è più efficiente? Quali sono gli usi specifici per ciascuno?

    
posta TronicZomB 10.05.2013 - 21:32
fonte

2 risposte

6

Penso sia molto chiaro in Documentazione InputMethodManager quando dice:

  • The input method manager as expressed by this class is the central point of the system that manages interaction between all other parts. It is expressed as the client-side API here which exists in each application context and communicates with a global system service that manages the interaction across all processes.
  • An input method (IME) implements a particular interaction model allowing the user to generate text. The system binds to the current input method that is use, causing it to be created and run, and tells it when to hide and show its UI. Only one IME is running at a time.

Ciò che intendo è che InputMethodManager è "più grande" e ha molta più responsabilità di setSoftInputMode. Il primo è un

Central system API to the overall input method framework (IMF) architecture, which arbitrates interaction between applications and the current input method.

e d'altra parte, il secondo è solo un metodo setter.

    
risposta data 14.05.2013 - 19:12
fonte
0

setSoftInputMode indica al framework se la finestra di input software deve essere mostrata o nascosta quando l'attività è focalizzata. Il framework implementa questo comportamento richiamando i metodi di InputMethodManager . Come accennato nella documentazione che hai citato, puoi esercitare un controllo più fine disabilitando il comportamento automatico ( SOFT_INPUT_STATE_UNCHANGED ) e poi implementando il comportamento preciso che vuoi con InputMethodManager .

    
risposta data 21.12.2015 - 22:54
fonte

Leggi altre domande sui tag