Surveiller les modifications de contenu d'EditText


Introduction à cette section :

Nous avons déjà entendu parler du contrôle EditText auparavant. Dans cette section, nous parlerons de la façon de surveiller les modifications du contenu de la zone de saisie ! C'est très pratique dans le développement réel. De plus, il explique également comment réaliser la visibilité du mot de passe d'EditText. Et invisible ! Bon, commençons cette section !


1. Surveillez les modifications du contenu d'EditText

Comme vous pouvez le voir dans le titre, il s'agit d'un mécanisme de traitement d'événements basé sur la surveillance. l'événement est OnClickListener et le contenu du texte L'écouteur de changement est : TextWatcher, nous pouvons appeler EditText.addTextChangedListener(mTextWatcher); Définissez la surveillance des modifications de contenu pour EditText !

Parlons brièvement de TextWatcher. Pour implémenter cette classe, vous devez implémenter trois méthodes :

public void beforeTextChanged(CharSequence s, int start, int count, int after);
public void onTextChanged(CharSequence s, int start, int before, int count);
public void afterTextChanged(Editable s);

sera déclenché dans les situations suivantes :

  • 1. Avant le changement de contenu
  • 2. Pendant le changement de contenu
  • 3.

Nous pouvons réécrire les méthodes associées en fonction des besoins réels. Généralement, la troisième méthode est réécrite plus souvent !

Il existe de nombreuses occasions de surveiller les changements dans le contenu EditText : Limitez le nombre de mots saisis, limitez le contenu saisi, etc.~

Voici un simple EditText personnalisé pour tout le monde Après avoir saisi le contenu, un cercle croisé s'affichera sur un côté après que l'utilisateur ait cliqué. Vous pouvez effacer la zone de texte~, bien sûr vous pouvez également ajouter TextWatcher directement à EditText sans le personnaliser puis définir le bouton de suppression~

Réaliser le rendu :

1.gif

EditText personnalisé : DelEditText.java

package demo.com.jay.buttondemo;

importer android.content.Context;
importer android.graphics.Rect;
importer android.graphics.drawable.Drawable;
importer android.text.Editable;
importer android.text.TextWatcher;
importer android.util.AttributeSet;
importer android.view.MotionEvent;
importer android.widget.EditText;

/**
 * Créé par coder-pig le 2015/7/16 0016.
 */
public class DelEditText extends EditText {

    private Drawable imgClear;
    private Context mContext;

    public DelEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.mContext = context;
        init();
    }

    private void init() {
        imgClear = mContext.getResources().getDrawable(R.drawable.delete_gray);
        addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeText Modifié (CharSequence s, int start, int count, int après) {

            }

            @Override
           public void onTextChanged(CharSequence s, int start, int avant, int count) {

            }

            @Override
            public void afterTextChanged(Editable editable) {
               setDrawable();
             }
        });
    }


    //绘制删除图片
    private void setDrawable(){
        if (length() < 1)
setCompoundDrawablesWithIntrinsicBounds(null, null, null, null);
else
setCompoundDrawablesWithIntrinsicBounds(null, null, imgClear, null);
}


//Lorsque la plage tactile est activée le droit Quand, déclenchez la méthode delete, cachez le fork
@Override
public boolean onTouchEvent(MotionEvent event) {
if(imgClear != null && event.getAction() == MotionEvent.ACTION_UP)
{
int eventX = (int) event.getRawX();
int eventY = (int) event.getRawY();
Rect rect = new Rect();
        getGlobalVisibleRect(rect )( event);
}


@Override
protected void finalize() lance Throwable {
super.finalize();
}

}


Arrière-plan d'EditText dessinable :
bg_frame_search.xml

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" > <solid android:color="@color/background_white" />

< coins android:radius="5dp" />
<AVC android:width="1px" android:color="@color/frame_search"/>
</shape>

颜色资源:color.xml

<?xml version="1.0" encoding="utf-8"?>
<ressources>
    <color name="reveal_color">#FFFFFF</color>
    <color name="bottom_color">#3086E4</color>
    <color name="bottom_bg">#40BAF8</color> ;
    <color name="frame_search">#ADAEAD</color>
    <color name="background_white">#FFFFFF</color>
    <color name="back_red" >#e75049</color>
</resources>

布局文件:activity_main.xml

<LinearLayout xmlns :android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="../style/images/back_red"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <demo.com.jay.buttondemo.DelEditText
        android:id="@+id/edit_search"
        android:layout_width="match_parent"
        android:layout_height="32dp "
        android:layout_margin="10dp"
        android:background="../style/images/bg_frame_search"
        android:hint="带删除按钮的EditText~"
        android : longueurmax= "20"
        android:padding="5dp"
        android:singleLine="true" />


</LinearLayout>

PS : Le code est très simple, donc je ne vais pas l'expliquer~


2 Implémenter le mot de passe visible et invisible d'EditText

C'est aussi une méthode très pratique. exigence, c'est-à-dire qu'une fois que l'utilisateur a cliqué sur le bouton, le mot de passe dans EditText peut être rendu visible ou invisible ~

Rendu d'implémentation :

2.gif

Code d'implémentation : activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/ res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context =".MainActivity"
android:layout_margin="5dp"
android:orientation="horizontal">

<EditText
android:id="@+id/edit_pawd"
android:layout_width= "0dp"
android:layout_weight="2"
android:layout_height="48dp"
android:inputType="textPassword"
android:background=".. /style/images/editborder" ; :layout_height="48dp"
android:text="Mot de passe visible"/>

</LinearLayout>

MainActivity.java


package com.jay.demo.edittextdemo;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text. method.HideReturnsTransformationMethod;
import android.text.method.PasswordTransformationMethod;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity étend AppCompatActivity {

    private EditText edit_pawd;
    private Button btnChange;
    private bo oléen flag = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
        edit_pawd = (EditText) findViewById(R.id.edit_pawd);
        btnChange = (Button) findViewById(R.id.btnChange);
        edit_pawd.setHorizontallyScrolling(true);    //设置EditText不换行
        btnChange.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(flag == true){
edit_pawd.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
                    flag = false;
                    btnChange.setText("密码不可见");
               }autre{
                    edit_pawd.setTransformationMethod(PasswordTransformationMethod.getInstance() );
                    flag = true;
btnChange.setText("Mot de passe visible");
                                                                                                                                                   🎜><? xml version="1.0" encoding="utf-8"?> .android.com/apk/res/android" >

<!--Définir une couleur d'arrière-plan transparente -->
<solid android:color="#FFFFFF" />

<!--Définir une bordure blanche -->
<AVC
android:width="1px"
android:color="#FFFFFF" //>
<!--Définissez les marges pour agrandir l'espace --> ;
<padding
android:bottom="5dp"
android:left="5dp"
android :right="5dp"
android:top="5dp" / >

</shape>



Résumé de cette section :

C'est tout pour cette rubrique, merci~