teclado studio samsung pulsar ocultar fuera edittext desactivar como codigo java android android-fragments android-softkeyboard

java - studio - ¿Cómo esconder el teclado virtual desde dentro de un fragmento?



ocultar teclado android studio (6)

Tengo FragmentActivity usando ViewPager para servir varios fragmentos. Cada uno es un ListFragment con el siguiente diseño:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="8dp"> <ListView android:id="@id/android:list" android:layout_width="fill_parent" android:layout_height="fill_parent" /> <EditText android:id="@+id/entertext" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout> </LinearLayout>

Al comenzar la actividad, se muestra el teclado virtual. Para remediar esto, hice lo siguiente dentro del fragmento:

@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { //Save the container view so we can access the window token viewContainer = container; //get the input method manager service imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); . . . } @Override public void onStart() { super.onStart(); //Hide the soft keyboard imm.hideSoftInputFromWindow(viewContainer.getWindowToken(), 0); }

ViewGroup container parámetro del ViewGroup container entrante de onCreateView como una forma de acceder al token de la ventana para la actividad principal. Esto se ejecuta sin error, pero el teclado no se oculta de la llamada a hideSoftInputFromWindow en onStart .

Originalmente, traté de usar el diseño inflado en lugar de container , es decir:

imm.hideSoftInputFromWindow(myInflatedLayout.getWindowToken(), 0);

pero esto arrojó una NullPointerException , presumiblemente porque el fragmento en sí no es una actividad y no tiene un token de ventana único.

¿Hay alguna manera de ocultar el teclado virtual desde un fragmento, o debería crear un método en FragmentActivity y llamarlo desde el fragmento?


Nada más que la siguiente línea de código funcionó para mí:

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


Si agrega el siguiente atributo a la definición del manifiesto de su actividad, suprimirá por completo que el teclado aparezca cuando se abra su actividad. Espero que esto ayude:

(Agregar a la definición del manifiesto de su actividad):

android:windowSoftInputMode="stateHidden"


Siempre que su Fragmento cree una Vista, puede usar el IBinder (token de ventana) de esa vista después de que se haya adjuntado. Por ejemplo, puede anular onActivityCreated en su Fragmento:

@Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); final InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(getView().getWindowToken(), 0); }


DialogFragment embargo, la excepción para DialogFragment , el foco del Dialog incrustado debe estar oculto, en su lugar, solo el primer EditText dentro del EditText Dialog incrustado.

this.getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);


en Fragemnt trabajando este código

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


@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_my, container, false); someClass.onCreate(rootView); return rootView; }

Mantener una instancia de mi vista de root en mi clase

View view; public void onCreate(View rootView) { view = rootView;

Use la vista para ocultar el teclado

public void removePhoneKeypad() { InputMethodManager inputManager = (InputMethodManager) view .getContext() .getSystemService(Context.INPUT_METHOD_SERVICE); IBinder binder = view.getWindowToken(); inputManager.hideSoftInputFromWindow(binder, InputMethodManager.HIDE_NOT_ALWAYS); }