En mi aplicación, la primera vista de todas mis pantallas es un EditText, por lo que cada vez que voy a una pantalla, aparece el teclado en pantalla. ¿Cómo puedo deshabilitar esta ventana emergente y habilitarla cuando hago clic manualmente en EditText?
eT = (EditText) findViewById(R.id.searchAutoCompleteTextView_feed);
eT.setOnFocusChangeListener(new OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus){
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(eT.getWindowToken(), 0);
}
}
});
código xml:
<ImageView
android:id="@+id/feedPageLogo"
android:layout_width="45dp"
android:layout_height="45dp"
android:src="@drawable/wic_logo_small" />
<Button
android:id="@+id/goButton_feed"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:text="@string/go" />
<EditText
android:id="@+id/searchAutoCompleteTextView_feed"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/goButton_feed"
android:layout_toRightOf="@id/feedPageLogo"
android:hint="@string/search" />
<TextView
android:id="@+id/feedLabel"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/feedPageLogo"
android:gravity="center_vertical|center_horizontal"
android:text="@string/feed"
android:textColor="@color/white" />
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ButtonsLayout_feed"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true" >
<Button
android:id="@+id/feedButton_feed"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_margin="0dp"
android:layout_weight="1"
android:background="@color/white"
android:text="@string/feed"
android:textColor="@color/black" />
<Button
android:id="@+id/iWantButton_feed"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_margin="0dp"
android:layout_weight="1"
android:background="@color/white"
android:text="@string/iwant"
android:textColor="@color/black" />
<Button
android:id="@+id/shareButton_feed"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_margin="0dp"
android:layout_weight="1"
android:background="@color/white"
android:text="@string/share"
android:textColor="@color/black" />
<Button
android:id="@+id/profileButton_feed"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_margin="0dp"
android:layout_weight="1"
android:background="@color/white"
android:text="@string/profile"
android:textColor="@color/black" />
</LinearLayout>
<ListView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/feedListView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_above="@id/ButtonsLayout_feed"
android:layout_below="@id/feedLabel"
android:textSize="15dp" >
</ListView>
la tercera vista (EditText) es donde está el foco.
android
android-edittext
Mosca doméstica
fuente
fuente
Respuestas:
La mejor solución se encuentra en el archivo de manifiesto del proyecto (AndroidManifest.xml) , agregue el siguiente atributo en la
activity
construcciónEjemplo:
<activity android:name=".MainActivity" android:windowSoftInputMode="stateHidden" />
Descripción:
Introducido en:
Enlace a los documentos
Nota: Los valores establecidos aquí (distintos de "stateUnspecified" y "adjustUnspecified") anulan los valores establecidos en el tema.
fuente
Tienes que crear una vista, encima de EditText, que tenga un enfoque 'falso':
Algo como :
<!-- Stop auto focussing the EditText --> <LinearLayout android:layout_width="0dp" android:layout_height="0dp" android:background="@android:color/transparent" android:focusable="true" android:focusableInTouchMode="true"> </LinearLayout> <EditText android:id="@+id/searchAutoCompleteTextView_feed" android:layout_width="200dp" android:layout_height="wrap_content" android:inputType="text" />
En este caso, utilicé LinearLayout para solicitar el enfoque. Espero que esto ayude.
Esto funcionó perfectamente ... gracias a Zaggo0
fuente
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
edittext.setShowSoftInputOnFocus(false);
Ahora puede utilizar cualquier teclado personalizado que desee.
fuente
La gente ha sugerido muchas soluciones excelentes aquí, pero utilicé esta técnica simple con mi EditText (no se requiere nada en java y AnroidManifest.xml). Simplemente configure su focusable y focusableInTouchMode en falso directamente en EditText.
<EditText android:id="@+id/text_pin" android:layout_width="136dp" android:layout_height="wrap_content" android:layout_margin="5dp" android:textAlignment="center" android:inputType="numberPassword" android:password="true" android:textSize="24dp" android:focusable="false" android:focusableInTouchMode="false"/>
Mi intención aquí es usar este cuadro de edición en la actividad de bloqueo de la aplicación donde le pido al usuario que ingrese el PIN y quiero mostrar mi teclado de PIN personalizado. Probado con minSdk = 8 y maxSdk = 23 en Android Studio 2.1
fuente
Agregue el siguiente código en su clase de actividad.
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
El teclado aparecerá cuando el usuario haga clic en EditText
fuente
Puede utilizar el siguiente código para deshabilitar el teclado en pantalla.
InputMethodManager im = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); im.hideSoftInputFromWindow(editText.getWindowToken(), 0);
fuente
Dos soluciones simples:
La primera solución se agrega debajo de la línea de código en el archivo de manifiesto xml. En el archivo de manifiesto (AndroidManifest.xml), agregue el siguiente atributo en la construcción de actividad
android: windowSoftInputMode = "stateHidden"
Ejemplo:
<activity android:name=".MainActivity" android:windowSoftInputMode="stateHidden" />
La segunda solución es agregar la siguiente línea de código en la actividad
//Block auto opening keyboard this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
Podemos usar cualquiera de las soluciones anteriores. Gracias
fuente
Declare la variable global para InputMethodManager:
private InputMethodManager im ;
En onCreate () defínalo:
im = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); im.hideSoftInputFromWindow(youredittext.getWindowToken(), 0);
Establezca onClickListener en ese texto de edición dentro de oncreate ():
youredittext.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { im.showSoftInput(youredittext, InputMethodManager.SHOW_IMPLICIT); } });
Esto funcionará.
fuente
Use el siguiente código, escríbalo debajo
onCreate()
InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
fuente
Pruébalo ... Resuelvo este problema usando el código: -
EditText inputArea; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); inputArea = (EditText) findViewById(R.id.inputArea); //This line is you answer.Its unable your click ability in this Edit Text //just write inputArea.setInputType(0); }
nada que pueda ingresar con la calculadora predeterminada en cualquier cosa, pero puede establecer cualquier cadena.
intentalo
fuente
Gracias @AB por una buena solución
android:focusableInTouchMode="false"
En este caso, si desactivará el teclado en la edición de texto, simplemente agregue android: focusableInTouchMode = "false" en el lema de edición de texto .
funciona para mí en Android Studio 3.0.1 minsdk 16, maxsdk26
fuente
A.B
la respuesta? ¿O es una respuesta a la pregunta original? Si este es un comentario paraA.B
la respuesta, entonces debe usar la opción de comentario proporcionada por StackOverflow y eliminar esta respuesta a la pregunta original.Prueba con esto:
Para cerrar, puede utilizar:
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(yourEditText.getWindowToken(), 0);
Pruébelo así en su código:
ed = (EditText)findViewById(R.id.editText1); InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(ed.getWindowToken(), 0); ed.setOnClickListener(new OnClickListener() { public void onClick(View v) { InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(ed, InputMethodManager.SHOW_IMPLICIT); } });
fuente
Bueno, tuve el mismo problema y acabo de abordar con focusable en el archivo XML.
<EditText android:cursorVisible="false" android:id="@+id/edit" android:focusable="false" android:layout_width="match_parent" android:layout_height="wrap_content" />
Probablemente también esté buscando seguridad. Esto también ayudará en eso.
fuente
Utilice el siguiente código en su
onCreate()
métodoeditText = (EditText) findViewById(R.id.editText); editText.requestFocus(); editText.postDelayed(new Runnable() { public void run() { InputMethodManager keyboard = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); keyboard.hideSoftInputFromWindow( editText.getWindowToken(), 0); } }, 200);
fuente
Lo único que debe hacer es agregar
android:focusableInTouchMode="false"
a EditText en xml y eso es todo (si alguien aún necesita saber cómo hacerlo de la manera más fácil)fuente
Para usuarios de Xamarin:
[Activity(MainLauncher = true, ScreenOrientation = ScreenOrientation.Portrait, WindowSoftInputMode = SoftInput.StateHidden)] //SoftInput.StateHidden - disables keyboard autopop
fuente
<TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:focusable="true" android:focusableInTouchMode="true"> <requestFocus/> </TextView> <EditText android:layout_width="match_parent" android:layout_height="wrap_content"/>
fuente
Si está utilizando Xamarin, puede agregar esto
Activity[(WindowSoftInputMode = SoftInput.StateAlwaysHidden)]
a partir de entonces, puede agregar esta línea en el método OnCreate ()
youredittext.ShowSoftInputOnFocus = false;
Si el dispositivo de destino no es compatible con el código anterior, puede utilizar el código siguiente en el evento de clic de EditText
InputMethodManager Imm = (InputMethodManager)this.GetSystemService(Context.InputMethodService); Imm.HideSoftInputFromWindow(youredittext.WindowToken, HideSoftInputFlags.None);
fuente
Encontré que el siguiente patrón me funciona bien en el código donde quiero mostrar un cuadro de diálogo para obtener la entrada (por ejemplo, la cadena que se muestra en el campo de texto es el resultado de las selecciones realizadas a partir de una lista de casillas de verificación en un cuadro de diálogo, en lugar de texto introducido a través del teclado).
Los clics iniciales en el campo de texto producen un cambio de enfoque, un clic repetido produce un evento de clic. Así que anulo ambos (aquí no refactorizo el código para ilustrar que ambos controladores hacen lo mismo):
tx = (TextView) m_activity.findViewById(R.id.allergymeds); if (tx != null) { tx.setShowSoftInputOnFocus(false); tx.setOnFocusChangeListener(new View.OnFocusChangeListener() { @Override public void onFocusChange(View view, boolean hasFocus) { if (hasFocus) { MedicationsListDialogFragment mld = new MedicationsListDialogFragment(); mld.setPatientId(m_sess.getActivePatientId()); mld.show(getFragmentManager(), "Allergy Medications Dialog"); } } }); tx.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { MedicationsListDialogFragment mld = new MedicationsListDialogFragment(); mld.setPatientId(m_sess.getActivePatientId()); mld.show(getFragmentManager(), "Allergy Medications Dialog"); } }); }
fuente
En una aplicación de Android que estaba creando, tenía tres
EditText
sLinearLayout
dispuestos horizontalmente. Tuve que evitar que el teclado virtual apareciera cuando se cargaba el fragmento. Además de la configuraciónfocusable
yfocusableInTouchMode
de verdad en elLinearLayout
, tenía que conjuntodescendantFocusability
ablocksDescendants
. EnonCreate
, llamérequestFocus
alLinearLayout
. Esto impedía que apareciera el teclado cuando se creaba el fragmento.Diseño -
<LinearLayout android:id="@+id/text_selector_container" android:layout_width="match_parent" android:layout_height="wrap_content" android:weightSum="3" android:orientation="horizontal" android:focusable="true" android:focusableInTouchMode="true" android:descendantFocusability="blocksDescendants" android:background="@color/black"> <!-- EditText widgets --> </LinearLayout>
En
onCreate
-mTextSelectorContainer.requestFocus();
fuente
Si alguien todavía está buscando la solución más fácil, establezca el siguiente atributo
true
en su diseño principalandroid:focusableInTouchMode="true"
Ejemplo:
<android.support.constraint.ConstraintLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:focusableInTouchMode="true"> ....... ...... </android.support.constraint.ConstraintLayout>
fuente
Use esto para habilitar y deshabilitar EditText ....
InputMethodManager imm; imm = (InputMethodManager) getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE); if (isETEnable == true) { imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0); ivWalllet.setImageResource(R.drawable.checkbox_yes); etWalletAmount.setEnabled(true); etWalletAmount.requestFocus(); isETEnable = false; } else { imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY,0); ivWalllet.setImageResource(R.drawable.checkbox_unchecked); etWalletAmount.setEnabled(false); isETEnable = true; }
fuente
Prueba esta respuesta
editText.setRawInputType(InputType.TYPE_CLASS_TEXT); editText.setTextIsSelectable(true);
Nota: solo para API 11+
fuente
private InputMethodManager imm; ... editText.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { v.onTouchEvent(event); hideDefaultKeyboard(v); return true; } }); private void hideDefaultKeyboard(View et) { getMethodManager().hideSoftInputFromWindow(et.getWindowToken(), 0); } private InputMethodManager getMethodManager() { if (this.imm == null) { this.imm = (InputMethodManager) getContext().getSystemService(android.content.Context.INPUT_METHOD_SERVICE); } return this.imm; }
fuente
para cualquier vista de texto en su actividad (o cree una vista de texto vacía falsa con android: layout_width = "0dp" android: layout_height = "0dp") y agregue para esta vista de texto siguiente: android: textIsSelectable = "true"
fuente
Simple, simplemente elimine la etiqueta "" del archivo xml
fuente
Solo necesita agregar una propiedad
android:focusable="false"
en particularEditText
en el diseño xml. Entonces puede escribir lista de clics paraEditText
sin la ventana emergente del teclado.fuente
El problema se puede ordenar usando, No es necesario establecer editText inputType en ningún valor, solo agregue la línea de abajo, editText.setTextIsSelectable (true);
fuente
inputType
. Pero parece que sería bueno saber si optara por esa otra respuesta, así que incluso si insiste en mantener esto como su propia respuesta, considere dejar un comentario allí de todos modos.