Avant de voter et de marquer comme doublon, lisez ma question.
J'ai lu les autres questions à ce sujet et toutes fonctionnent pour mes mises en page, sauf pour la toute première créée.
Pour le moment, cela se trouve au sommet de ma méthode onCreate
:
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
^ Cela fait qu'au moins le clavier n'apparaisse pas au démarrage, mais la variable EditText
est toujours active.
Ceci est la XML
pour ma EditText
:
<EditText
Android:id="@+id/password"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_below="@+id/changePass"
Android:layout_centerHorizontal="true"
Android:layout_marginTop="167dp"
Android:ems="10"
Android:imeOptions="flagNoExtractUi"
Android:inputType="textPassword"
Android:maxLength="30" >
</EditText>
Voici à quoi ça ressemble quand je lance mon activité:
Le problème est que, avec certains téléphones, lorsqu'un EditText
est concentré de la sorte, ils ne peuvent pas y écrire. Je le veux pas concentre.
Ce que j'ai fait fonctionne pour les prochaines mises en page, dans le sens où la EditTexts
n'est pas centrée sur et ressemblerait davantage à ceci:
Notez que c'est la même disposition, cependant. Ceci est l'écran après que l'utilisateur a été ramené à cet écran, ce qui indiquerait que rien ne va pas avec XML
car c'est le même XML
, mais le problème est que la EditText
est uniquement centrée sur lorsque l'activité est créée.
J'ai fait des recherches et toutes les autres questions ne m'aident pas (ils ont toutefois aidé le clavier à ne pas apparaître, heureusement). Comment puis-je faire en sorte que la variable EditText
au démarrage ressemble à la deuxième capture d'écran plutôt qu'à la première?
Vous pouvez définir les propriétés de Layout comme Android:descendantFocusability="beforeDescendants"
et Android:focusableInTouchMode="true"
Exemple:
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/mainLayout"
Android:descendantFocusability="beforeDescendants"
Android:focusableInTouchMode="true" >
<EditText
Android:id="@+id/password"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_below="@+id/changePass"
Android:layout_centerHorizontal="true"
Android:layout_marginTop="167dp"
Android:ems="10"
Android:imeOptions="flagNoExtractUi"
Android:inputType="textPassword"
Android:maxLength="30" >
</EditText>
</RelativeLayout>
Que celui-ci soit utile;)
Code XML:
<EditText
Android:id="@+id/password"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_below="@+id/changePass"
Android:layout_centerHorizontal="true"
Android:layout_marginTop="167dp"
Android:ems="10"
Android:focusable="false"
Android:imeOptions="flagNoExtractUi"
Android:inputType="textPassword"
Android:maxLength="30" >
</EditText>
Code Java:
EditText edPwd = (EditText)findViewById(R.id.password);
edtPwd.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
v.setFocusable(true);
v.setFocusableInTouchMode(true);
return false;
}
});
définissez false comme focusable en xml et définissez-le sur true via le code
Dans votre main_layout Ajoutez ces 2 lignes:
Android:descendantFocusability="beforeDescendants"
Android:focusableInTouchMode="true"
exemple:
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:descendantFocusability="beforeDescendants"
Android:focusableInTouchMode="true"> *YOUR LAYOUT CODE* </RelativeLayout>
Ajouter ceci dans onCreate ()
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
ou dans onCreateView ()
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
Code XML
<EditText
Android:imeOptions="flagNoExtractUi"
Android:focusable="false"
/>
Code Java dans onClickListerner
mEdtEnterPhoneNumber.setFocusable(true);
mEdtEnterPhoneNumber.setFocusableInTouchMode(true);
la meilleure solution est ici: https://stackoverflow.com/a/45139132/3172843
la solution correct et simple consiste à définirFocusable false et setFocusableInTouchMode true. de sorte que EditText gagne le focus uniquement lorsque l'utilisateur touche cet EditText
Android:focusable="false"
Android:focusableInTouchMode="true"
Le plus simple est d’ajouter
Android:windowSoftInputMode="stateAlwaysHidden|adjustPan"
dans la balise d'activité du fichier Manifest.xml
Il est possible d'utiliser Android:focusable="false"
pour le désactiver, mais si cela ne fonctionne pas pour une raison quelconque, vous pouvez simplement mettre une LinearLayout
et le focus sera activé sans perturber votre mise en page.
REMARQUE: Eclipse vous indiquera une erreur en vous disant que votre LinearLayout
est inutile car elle n’a aucun contenu. Vous devriez pouvoir l'ignorer sans problèmes.
Par exemple:
<LinearLayout
Android:focusable="true"
Android:focusableInTouchMode="false"
Android:layout_width="0dp"
Android:layout_height="0dp"
/>
<EditText
Android:id="@+id/password"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_below="@+id/changePass"
Android:layout_centerHorizontal="true"
Android:layout_marginTop="167dp"
Android:ems="10"
Android:imeOptions="flagNoExtractUi"
Android:inputType="textPassword"
Android:maxLength="30" >
</EditText>
</LinearLayout>
<activity
Android:name=".MainActivity"
Android:windowSoftInputMode="stateAlwaysHidden" />
Android: windowSoftInputMode = "stateAlwaysHidden"
ajoutez cette ligne dans la balise d'activité du fichier Manifest.xml. Lorsque vous cliquez sur TextEdit, le clavier devient actif.
Dans Manifest, copiez et collez le code ci-dessous.
<activity
Android:name=".LoginActivity"
Android:windowSoftInputMode="stateAlwaysHidden"/>
1) C'est la plus simple, ouvrez le manifeste et mettez le code suivant entre les balises d'activité:
Android:windowSoftInputMode="stateHidden"
2) Mettez ces attributs dans la mise en page parent
Android:focusable="true"
Android:focusableInTouchMode="true"
Vous pouvez le faire par programme. utilisez editText.setEnabled(false)
dans votre méthode onStart()
de votre activité (pas dans onCreate () - car il s'agit d'une méthode d'initialisation des composants de l'interface graphique)