Dans mon application, la première vue de tous mes écrans est un EditText. Ainsi, chaque fois que je vais sur un écran, le clavier à l'écran apparaît. Comment puis-je désactiver cette fenêtre et l'activer lorsque vous cliquez manuellement sur 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);
}
}
});
code 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 troisième vue (EditText) est l'endroit où le focus est.
La meilleure solution réside dans le fichier Project Manifest (AndroidManifest.xml), ajoutez l'attribut suivant dans la construction activity
.
Android: windowSoftInputMode = "stateHidden"
Exemple:
<activity Android:name=".MainActivity"
Android:windowSoftInputMode="stateHidden" />
La description:
Introduit dans:
Remarque:Les valeurs définies ici (autres que "stateUnspecified" et "adjustUnspecified") remplacent les valeurs définies dans le thème.
Vous devez créer une vue, au-dessus de EditText, qui prend un "faux" focus:
Quelque chose comme :
<!-- 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" />
Dans ce cas, j'ai utilisé LinearLayout pour demander le focus. J'espère que cela t'aides.
Cela a fonctionné parfaitement ... grâce à Zaggo0
edittext.setShowSoftInputOnFocus(false);
Vous pouvez maintenant utiliser n'importe quel clavier personnalisé.
Ajoutez le code ci-dessous sur votre classe d'activité.
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
Le clavier apparaît lorsque l'utilisateur clique sur le texte d'édition
Les gens ont suggéré de nombreuses solutions intéressantes ici, mais j’utilisais cette technique simple avec mon EditText (rien dans Java et AnroidManifest.xml n’est requis). Il suffit de définir votre focusable et focusableInTouchMode sur false directement sur 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"/>
Mon intention ici est d’utiliser cette zone de saisie dans l’activité de verrouillage de l’application où je demande à l’utilisateur de saisir le PIN et de montrer mon clavier personnalisé PIN. Testé avec minSdk = 8 et maxSdk = 23 sur Android Studio 2.1
Vous pouvez utiliser le code suivant pour désactiver le clavier à l'écran.
InputMethodManager im = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
im.hideSoftInputFromWindow(editText.getWindowToken(), 0);
Deux solutions simples:
La première solutionest ajoutée sous la ligne de code dans le fichier xml manifeste . Dans le fichier manifeste (AndroidManifest.xml), ajoutez l'attribut suivant dans la construction d'activité.
Android: windowSoftInputMode = "stateHidden"
Exemple:
<activity Android:name=".MainActivity"
Android:windowSoftInputMode="stateHidden" />
Deuxième solution ajoute la ligne de code ci-dessous dans l'activité
//Block auto opening keyboard
this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
Nous pouvons utiliser l'une des solutions ci-dessus. Merci
Déclarez la variable globale pour InputMethodManager:
private InputMethodManager im ;
Sous onCreate (), définissez-le:
im = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
im.hideSoftInputFromWindow(youredittext.getWindowToken(), 0);
Définissez onClickListener sur ce texte édité dans oncreate ():
youredittext.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
im.showSoftInput(youredittext, InputMethodManager.SHOW_IMPLICIT);
}
});
Cela fonctionnera.
essayez-le ....... je résous ce problème en utilisant le code: -
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);
}
rien ne peut entrer par défaut sur la calculatrice, mais vous pouvez définir une chaîne.
l'essayer
Utilisez le code suivant, écrivez-le sous 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);
Eh bien, j'ai le même problème et je viens de m'attaquer à focusable dans le fichier XML.
<EditText
Android:cursorVisible="false"
Android:id="@+id/edit"
Android:focusable="false"
Android:layout_width="match_parent"
Android:layout_height="wrap_content" />
Vous recherchez probablement aussi la sécurité. Cela aidera à cela aussi.
Merci @ A.B pour une bonne solution
Android:focusableInTouchMode="false"
dans ce cas, si vous souhaitez désactiver le clavier dans le texte modifié, ajoutez simplement Android: focusableInTouchMode = "false" in tagline edittext.
travailler pour moi dans Android Studio 3.0.1 minsdk 16, maxsdk26
Essayez avec ceci:
EditText yourEditText= (EditText) findViewById(R.id.yourEditText);
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(yourEditText, InputMethodManager.SHOW_IMPLICIT);
Pour fermer, vous pouvez utiliser:
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(yourEditText.getWindowToken(), 0);
Essayez comme ça dans votre code:
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);
}
});
Utilisez le code suivant dans votre méthode onCreate()
-
editText = (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);
Si vous utilisez Xamarinvous pouvez ajouter ceci
Activity[(WindowSoftInputMode = SoftInput.StateAlwaysHidden)]
ensuite, vous pouvez ajouter cette ligne dans la méthode OnCreate ().
youredittext.ShowSoftInputOnFocus = false;
Si le périphérique ciblé ne prend pas en charge le code ci-dessus, vous pouvez utiliser le code ci-dessous dans l'événement de clic EditText.
InputMethodManager Imm = (InputMethodManager)this.GetSystemService(Context.InputMethodService);
Imm.HideSoftInputFromWindow(youredittext.WindowToken, HideSoftInputFlags.None);
La seule chose que vous devez faire est d’ajouter Android:focusableInTouchMode="false"
à EditText au format XML et c’est tout (si quelqu'un a encore besoin de savoir comment le faire facilement).
J'ai trouvé que le modèle suivant fonctionnait bien pour moi dans le code où je voulais afficher une boîte de dialogue pour obtenir l'entrée (par exemple, la chaîne affichée dans le champ de texte est le résultat de sélections effectuées dans une liste de cases à cocher d'une boîte de dialogue plutôt texte saisi via le clavier).
Les premiers clics dans le champ de texte entraînent un changement de focus, un clic répété génère un événement de clic. Donc, je remplace les deux (ici, je ne refactorise pas le code pour illustrer que les deux gestionnaires font la même chose):
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");
}
});
}
Pour les utilisateurs de Xamarin:
[Activity(MainLauncher = true,
ScreenOrientation = ScreenOrientation.Portrait,
WindowSoftInputMode = SoftInput.StateHidden)] //SoftInput.StateHidden - disables keyboard autopop
Essayez cette réponse,
editText.setRawInputType(InputType.TYPE_CLASS_TEXT);
editText.setTextIsSelectable(true);
Remarque: uniquement pour API 11+
Dans une application Android que je construisais, j'avais trois EditText
s dans un LinearLayout
disposés horizontalement. J'ai dû empêcher le clavier logiciel d'apparaître lorsque le fragment était chargé. En plus de définir focusable
et focusableInTouchMode
sur true sur LinearLayout
, j'ai dû définir descendantFocusability
sur blocksDescendants
. Dans onCreate
, j'ai appelé requestFocus
sur le LinearLayout
. Cela empêchait le clavier d'apparaître lors de la création du fragment.
Disposition -
<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>
Dans onCreate
- mTextSelectorContainer.requestFocus();
<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"/>
Utilisez ceci pour activer et désactiver 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;
}
Simple, il suffit de supprimer "" tag du fichier XML
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;
}
Si quelqu'un recherche toujours la solution la plus simple, définissez l'attribut suivant sur true
sur votre modèle parent.
Android:focusableInTouchMode="true"
Exemple:
<Android.support.constraint.ConstraintLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:focusableInTouchMode="true">
.......
......
</Android.support.constraint.ConstraintLayout>
Ce problème peut être trié en utilisant, Il n'est pas nécessaire de définir editText inputType sur une valeur, Ajoutez simplement la ligne ci-dessous, EditText.setTextIsSelectable (true);