Le contenu de l'entrée EditText n'est pas affiché

L'effet d'affichage normal devrait être comme ceci:

Le système affiche des anomalies dans la version 9.0, les symptômes sont les suivants:

Récurrence du problème

On constate que les deux zones de saisie ci-dessus s'affichent en temps réel lors de la saisie de caractères. Lorsque le curseur se déplace vers la zone de saisie la plus basse, le curseur cesse de battre et les caractères saisis ne s'affichent pas en temps réel. Lorsque le clavier est rétracté À ce moment-là, les personnages réapparurent.

Premièrement, il existe deux solutions:

Le premier: définissez android: windowSoftInputMode sur "AdjustResize | stateHidden" (non recommandé)

 

android:windowSoftInputMode="adjustResize|stateHidden" 
 

 

 
  1. <application

  2. ...

  3. android: hardwareAccelerated = "false"

  4. android: theme = "@ style / Theme.AppCompat.Light.NoActionBar">

  5.  
  6. <activité

  7. android: name = ".activity.LoginActivity"

  8. ...

  9. android: windowSoftInputMode = "AdjustUnspecified | stateHidden" />

  10. </application>

Le second: activer l'accélération matérielle

Après mes différents tests, j'ai constaté que le problème était dû au fait que l'accélération matérielle n'était pas activée.

(WTF, il y aura des problèmes lorsque l'accélération matérielle est activée, et il y aura des problèmes s'il n'y a pas de réunion dans 9.0, WTF )

1. Activez l'accélération matérielle sous l'application (il va sans dire que ce n'est pas recommandé, mais cela fonctionne bien)

 
  1. <application

  2. ...

  3. android: hardwareAccelerated = "false"

  4. android: theme = "@ style / Theme.AppCompat.Light.NoActionBar">

  5.  
  6. <activité

  7. android: name = ".activity.LoginActivity"

  8. ...

  9. android: windowSoftInputMode = "AdjustUnspecified | stateHidden" />

  10. </application>

2. Activez l'accélération matérielle sous le nœud d'activité (oui, recommandé)

 
  1. <application

  2. ...

  3. android: hardwareAccelerated = "false"

  4. android: theme = "@ style / Theme.AppCompat.Light.NoActionBar">

  5.  
  6. <activité

  7. android: name = ".activity.LoginActivity"

  8. ...

  9. android: hardwareAccelerated = "true"

  10. android: windowSoftInputMode = "AdjustUnspecified | stateHidden" />

  11. </application>

3. Activer l'accélération matérielle pour la vue spécifiée (fortement recommandé)

        EidtText.setLayerType(View.LAYER_TYPE_HARDWARE,null);
 

Veuillez choisir l'un des trois ci-dessus en fonction de vos besoins

 

 

analyser le problème:

(Je n'ai pas trouvé la bonne direction au début et j'ai fait quelques détours. L'écriture ci-dessous est plus verbeuse, vous pouvez ignorer celles que vous n'aimez pas)

Le fichier de mise en page d'origine est le suivant:

 
  1. <LinearLayout xmlns: android = "http://schemas.android.com/apk/res/android"

  2. android: layout_width = "match_parent"

  3. android: layout_height = "match_parent"

  4. android: layout_centerInParent = "true"

  5. android: layout_centerHorizontal = "true"

  6. android: layout_centerVertical = "true"

  7. android: paddingLeft = "40dp"

  8. android: paddingRight = "40dp"

  9. android: background = "@ color / white_color"

  10. android: focusable = "vrai"

  11.  
  12. android: focusableInTouchMode = "true"

  13. android: gravité = "centre"

  14. android: orientation = "vertical">

  15.  
  16. <ImageView

  17. android: layout_width = "96dp"

  18. android: layout_height = "94dp"

  19. android: background = "# 99666666" />

  20.  
  21. <TextView

  22. android: layout_width = "wrap_content"

  23. android: layout_height = "wrap_content"

  24. android: layout_marginTop = "5dp"

  25. android: text = "@ string / app_name"

  26. android: textColor = "# 585858"

  27. android: textSize = "20sp"

  28. android: visibilité = "invisible" />

  29.  
  30. <Disposition linéaire

  31. android: layout_width = "match_parent"

  32. android: layout_height = "wrap_content"

  33. android: layout_marginTop = "25dp"

  34. android: orientation = "vertical">

  35.  
  36. <TextView

  37. android: layout_width = "wrap_content"

  38. android: layout_height = "wrap_content"

  39. android: layout_marginLeft = "5dp"

  40. android: layout_marginBottom = "5dp"

  41. android: text = "Enterprise ID:"

  42. android: textSize = "14sp" />

  43.  
  44. <ImageView

  45. android: id = "@ + id / iv_company"

  46. android: layout_width = "40dp"

  47. android: layout_height = "40dp"

  48. android: padding = "4dp"

  49. android: scaleType = "fitXY"

  50. android: src = "@ drawable / ic_title_home_default"

  51. android: visibilité = "parti" />

  52.  
  53. <EditText

  54. android: id = "@ + id / et_company_login"

  55. android: layout_width = "match_parent"

  56. android: layout_height = "match_parent"

  57. android: layout_marginLeft = "5dp"

  58. android: background = "@ drawable / selector_login_edittext"

  59. android: hint = "Veuillez saisir le numéro d'entreprise"

  60. android: imeOptions = "actionNext"

  61. android: lignes = "1"

  62. android: padding = "10dp"

  63. android: paddingLeft = "5dp"

  64. android: singleLine = "true"

  65. android: textColor = "# 585858"

  66. android: textSize = "14sp" />

  67. </LinearLayout>

  68.  
  69. <Voir

  70. android: id = "@ + id / view_userfocus_login"

  71. android: layout_width = "match_parent"

  72. android: layout_height = "1dp"

  73. android: background = "@ color / white_color" />

  74.  
  75. <Disposition linéaire

  76. android: layout_width = "match_parent"

  77. android: layout_height = "wrap_content"

  78. android: layout_marginTop = "10dp"

  79. android: orientation = "vertical">

  80.  
  81. <ImageView

  82. android: id = "@ + id / iv_user_login"

  83. android: layout_width = "40dp"

  84. android: layout_height = "40dp"

  85. android: padding = "4dp"

  86. android: scaleType = "fitXY"

  87. android: src = "@ drawable / user_white"

  88. android: visibilité = "parti" />

  89.  
  90. <TextView

  91. android: layout_width = "wrap_content"

  92. android: layout_height = "wrap_content"

  93. android: layout_marginLeft = "5dp"

  94. android: layout_marginBottom = "5dp"

  95. android: text = "Nom d'utilisateur:"

  96. android: textSize = "14sp" />

  97.  
  98. <EditText

  99. android: id = "@ + id / et_user_login"

  100. android: layout_width = "match_parent"

  101. android: layout_height = "match_parent"

  102. android: layout_marginLeft = "5dp"

  103. android: background = "@ drawable / selector_login_edittext"

  104. android: hint = "Nom d'utilisateur"

  105. android: imeOptions = "actionNext"

  106. android: lignes = "1"

  107. android: padding = "10dp"

  108. android: paddingLeft = "5dp"

  109. android: singleLine = "true"

  110. android: textColor = "# 585858"

  111. android: textSize = "14sp" />

  112. </LinearLayout>

  113.  
  114. <Voir

  115. android: layout_width = "match_parent"

  116. android: layout_height = "1dp"

  117. android: background = "@ color / white_color" />

  118.  
  119. <Disposition linéaire

  120. android: layout_width = "match_parent"

  121. android: layout_height = "wrap_content"

  122. android: layout_marginTop = "10dp"

  123. android: orientation = "vertical">

  124.  
  125. <ImageView

  126. android: id = "@ + id / iv_password_login"

  127. android: layout_width = "40dp"

  128. android: layout_height = "40dp"

  129. android: padding = "4dp"

  130. android: scaleType = "fitXY"

  131. android: src = "@ drawable / password_white"

  132. android: visibilité = "parti" />

  133.  
  134. <TextView

  135. android: layout_width = "wrap_content"

  136. android: layout_height = "wrap_content"

  137. android: layout_marginLeft = "5dp"

  138. android: layout_marginBottom = "5dp"

  139. android: text = "Mot de passe:"

  140. android: textSize = "14sp" />

  141.  
  142. <EditText

  143. android: id = "@ + id / et_password_login"

  144. android: layout_width = "match_parent"

  145. android: layout_height = "40dp"

  146. android: layout_marginLeft = "5dp"

  147. android: background = "@ drawable / selector_login_edittext"

  148. android: hint = "Mot de passe"

  149. android: imeOptions = "actionDone"

  150. android: inputType = "textPassword"

  151. android: lignes = "1"

  152. android: padding = "10dp"

  153. android: paddingLeft = "5dp"

  154. android: singleLine = "true"

  155. android: textColor = "# 585858"

  156. android: textSize = "14sp" />

  157. </LinearLayout>

  158.  
  159. <Voir

  160. android: id = "@ + id / view_pwdfocus_login"

  161. android: layout_width = "match_parent"

  162. android: layout_height = "1dp"

  163. android: background = "@ color / white_color" />

  164.  
  165. <TextView

  166. android: id = "@ + id / btn_login"

  167. android: layout_width = "match_parent"

  168. android: layout_height = "wrap_content"

  169. android: layout_marginTop = "30dp"

  170. android: background = "@ drawable / selector_greem_btn_bg"

  171. android: gravité = "centre"

  172. android: padding = "8dp"

  173. android: text = "Connexion"

  174. android: textColor = "@ color / white_color"

  175. android: textSize = "16sp" />

  176.  
  177. <Disposition relative

  178. android: layout_width = "match_parent"

  179. android: layout_height = "40dp"

  180. android: layout_marginTop = "15dp">

  181.  
  182. <CheckBox

  183. android: id = "@ + id / cb_remember_login"

  184. android: layout_width = "wrap_content"

  185. android: layout_height = "wrap_content"

  186. android: layout_alignParentStart = "true"

  187. android: layout_alignParentLeft = "true"

  188. android: layout_centerVertical = "true"

  189. android: background = "@ drawable / selector_remember_login"

  190. android: button = "@null" />

  191.  
  192. <TextView

  193. android: layout_width = "wrap_content"

  194. android: layout_height = "wrap_content"

  195. android: layout_centerVertical = "true"

  196. android: layout_marginLeft = "5dp"

  197. android: layout_toRightOf = "@ + id / cb_remember_login"

  198. android: text = "Mémoriser le mot de passe"

  199. android: textSize = "@ dimen / text_moderate_size" />

  200.  
  201. <Bouton

  202. android: id = "@ + id / btn_config_login"

  203. android: layout_width = "80dp"

  204. android: layout_height = "match_parent"

  205. android: layout_alignParentRight = "true"

  206. android: background = "@ drawable / login_item_btn"

  207. android: onClick = "onConfig"

  208. android: text = "Configuration du système"

  209. android: textColor = "# 149048"

  210. android: textSize = "@ dimen / text_moderate_size"

  211. android: visibilité = "parti" />

  212. </RelativeLayout>

  213. </LinearLayout>

Fichier manifeste d'origine:

 
  1. <activité

  2. android: name = ".activity.LoginActivity"

  3. android: configChanges = "orientation | keyboardHidden | navigation | screenSize"

  4. android: icon = "@ drawable / user_btn"

  5. android: launchMode = "singleTask"

  6. android: screenOrientation = "portrait"

  7. android: windowSoftInputMode = "AdjustPan | stateHidden" />

同样的代码拷贝到demo里运行没有问题,项目里运行就有问题
 

Le fichier manifeste a ensuite été simplifié comme suit:

 
  1. <activité

  2. android: name = ".activity.LoginActivity"

  3. android: windowSoftInputMode = "AdjustPan | stateHidden" />

        <activity android:name=".activity.LoginActivity"/>
 
 
  1. <activité

  2. android: name = ".activity.LoginActivity"

  3. android: windowSoftInputMode = "AdjustUnspecified | stateHidden" />

Le problème n'a pas été résolu, puis deviné:

1. Est-ce causé par du code dans le fichier java?

2. La fenêtre contextuelle du clavier bloque-t-elle la zone de saisie?

Vérifiez la première conjecture:

1. Modifiez la position du nom d'utilisateur dans la deuxième zone de saisie et le mot de passe dans la troisième zone de saisie de la mise en page. Après son exécution, vous constatez que la zone de saisie du mot de passe est normale et que la zone de saisie du nom d'utilisateur a la même problème;

2. Faites une copie de la zone de saisie du mot de passe dans la mise en page à la fin, supprimez l'ID du contrôle et après son exécution, il s'avère que les problèmes ci-dessus se sont produits dans les deux zones de mot de passe;

3. Modifiez LoginActivity comme suit:

 
  1. public class LoginActivity étend l'activité {

  2. @Passer outre

  3. protected void onCreate (@Nullable Bundle savedInstanceState) {

  4. super.onCreate (savedInstanceState);

  5. setContentView (R.layout.activity_login);

  6. }

  7. }

Trouvé après l'exécution: le problème existe toujours

Conclusion: le problème n'a rien à voir avec le code java

Vérifiez la deuxième conjecture:

Placez plusieurs EditTexts côte à côte dans un LinearLayout dans le sens vertical et enveloppez un NestedScrollView dans le calque externe. Après l'exécution, un phénomène magique apparaît:

Lors de la saisie, aucun caractère n'est affiché et des caractères apparaissent dans la zone de saisie lors du balayage vers le haut, et une demi-zone de tirage est laissée au-dessus du clavier.

Je suppose que tu aimes

Origine blog.csdn.net/guodashen007/article/details/108768508
conseillé
Classement