Mon EditText a une certaine couleur, mais lorsque j'entre du texte, cela devrait changer. Dis que c'est gris, j'ai commencé à entrer et c'est jaune. Ce EditText est également ciblé, donc lorsque cette activité commence - je peux déjà saisir le texte. Comment j'ai essayé:

<style name="LoginEnterField">
    <item name="android:textColorHint">@color/black</item>
    <item name="android:textColor">@color/black</item>
    <item name="android:background">@drawable/selector_edittext</item>
    <item name="android:textSize">@dimen/general_text_size</item>
    <item name="android:paddingLeft">@dimen/activity_inner_horizontal_margin</item>
    <item name="android:paddingRight">@dimen/activity_inner_horizontal_margin</item>
</style>

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

    android:shape="rectangle">
    <solid android:color="@color/grey"/>
    <corners android:radius="5dp" />

</shape>

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

  android:shape="rectangle">
  <solid android:color="@color/yellow"/>
  <corners android:radius="5dp" />

</shape>

<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_focused="true" android:drawable="@drawable/roundbox_active_style"/>
  <item android:drawable="@drawable/roundbox_inactive_style" />
</selector>

Je pense que le point est dans ce sélecteur. Mon EditText change de couleur, mais il est toujours jaune. Comment faire qu'il ne devienne jaune que si j'entre du texte? Je ne peux pas modifier le code! C'est très important. Je ne peux pas ajouter ou modifier uniquement des fichiers XML.

EDIT: Il est impossible de faire uniquement à partir de xml, alors modifiez le code.

-1
VolodymyrH 16 nov. 2017 à 14:36

5 réponses

Meilleure réponse

Utilisez TextWatcher .

Lorsqu'un objet d'un type est attaché à un Editable, ses méthodes seront appelées lorsque le texte est modifié.

onTextChanged (CharSequence s, int start, int before, int count) - Cette méthode est appelée pour vous avertir que, dans les s, le décompte les caractères commençant au début viennent de remplacer l'ancien texte qui avait longueur avant.

  public void onTextChanged(CharSequence s, int start, int before, int count) {
                // Your Code // call .setBackgroundColor method here


    }
2
IntelliJ Amiya 16 nov. 2017 à 11:37

Il est impossible de le faire uniquement à partir de xml. Vous devez de toute façon apporter des modifications au code.

0
VolodymyrH 20 nov. 2017 à 10:53

Utilisez addTextChangedListener

 public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                if (!editText.getText().toString().trim().isEmpty()) {
                    editText.setBackgroundColor(Your New Color);
                } else {
                    editText.setBackgroundColor(Your Old Color);
                }
            }
0
Jayesh 16 nov. 2017 à 12:54

Utilisez TextWatcher

editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void afterTextChanged(Editable editable) {

            }
        });

Vous pouvez ajouter le code de votre choix dans n'importe quelle méthode qui vous convient. Pour plus d'informations, visitez:

https://developer.android.com/reference/android/text/TextWatcher.html

0
Sara Tirmizi 16 nov. 2017 à 12:43

Essayez cette utilisation addTextChangedListener

addTextChangedListener (observateur de TextWatcher)

Ajoute un TextWatcher à la liste de ceux dont les méthodes sont appelées chaque fois que le texte de ce editText change.

editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                if (!editText.getText().toString().trim().isEmpty()) {
                    editText.setBackgroundColor(ContextCompat.getColor(Main2Activity.this, R.color.colorPrimary));
                } else {
                    editText.setBackgroundColor(ContextCompat.getColor(Main2Activity.this, R.color.colorPrimaryDark));
                }
            }

            @Override
            public void afterTextChanged(Editable editable) {

            }
        });
5
Goku 16 nov. 2017 à 11:38
47328652