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.
5 réponses
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
}
Il est impossible de le faire uniquement à partir de xml. Vous devez de toute façon apporter des modifications au code.
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);
}
}
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
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) {
}
});
De nouvelles questions
android
Android est le système d'exploitation mobile de Google, utilisé pour la programmation ou le développement d'appareils numériques (Smartphones, tablettes, automobiles, téléviseurs, Wear, Glass, IoT). Pour les sujets liés à Android, utilisez des balises spécifiques à Android telles que l'intention d'Android, l'activité d'Android, l'adaptateur Android, etc. Pour les questions autres que le développement ou la programmation, mais liées au cadre Android, utilisez ce lien: https: // android.stackexchange.com.