Pantau perubahan kandungan EditText


Pengenalan kepada bahagian ini:

Kami telah pun mengetahui tentang kawalan EditText sebelum ini Dalam bahagian ini, kami akan bercakap tentang cara memantau perubahan kandungan kotak input! Ini sangat praktikal dalam pembangunan sebenar Selain itu, ia juga bercakap tentang cara merealisasikan keterlihatan kata laluan EditText. Dan tidak kelihatan! Baiklah, mari mulakan bahagian ini!


1. Pantau perubahan kandungan EditText

Seperti yang anda lihat dari tajuk, ia adalah mekanisme pemprosesan acara berdasarkan pemantauan acara ialah OnClickListener, dan kandungan teks Pendengar perubahan ialah: TextWatcher, kita boleh memanggil EditText.addTextChangedListener(mTextWatcher); Tetapkan pemantauan perubahan kandungan untuk EditText!

Mari kita bincangkan secara ringkas tentang TextWatcher Untuk melaksanakan kelas ini, anda perlu melaksanakan tiga kaedah:

public void beforeTextChanged(CharSequence s, int start, int count, int. selepas);
public void onTextChanged(CharSequence s, int start, int before, int count);
public void afterTextChanged(Sunting s);

akan dicetuskan dalam situasi berikut:

  • 1 Sebelum kandungan berubah
  • 2 Semasa perubahan kandungan
  • 3

Kami boleh menulis semula kaedah yang berkaitan mengikut keperluan sebenar Secara amnya, kaedah ketiga ditulis semula dengan lebih kerap.

Terdapat banyak kesempatan untuk memantau perubahan dalam kandungan EditText: Hadkan bilangan perkataan yang dimasukkan, hadkan kandungan input, dsb.~

Berikut ialah EditTeks tersuai untuk semua orang Selepas memasukkan kandungan, bulatan bersilang akan dipaparkan pada satu sisi Anda boleh mengosongkan kotak teks~, sudah tentu anda juga boleh menambah TextWatcher terus ke EditText tanpa menyesuaikannya dan kemudian tetapkan butang padam~

Mencapai rendering:

1.gif

Teks Edit Tersuai: DelEditText.java

pakej demo.com.jay.buttondemo;

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

/**
 * Dicipta oleh coder-pig pada 2015/7/16 0016.
 */
kelas awam DelEditText memanjangkan EditText D {

    pribadi Drawable imgClear;
    dit teks pribadi ;                                                      private xt(Konteks konteks, attributeset attrs) {
super (konteks, attrs);
this.mcontext = context;
init (); > Imgclear = mcontext.getResources (). selepas) {

            }

            @Override
             public void onTextChanged(CharSequence t,  int  star count            }

            @Override
            terkosong terbuka selepasTextChanged(Boleh diedit) {
                setDrawable();<   >          ;       
    }


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

julat pada //W🎜>>>>> kanan Apabila, cetuskan kaedah padam, sembunyikan garpu
@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 );
rect.left = rect.right - 100;
if (rect.contains(eventX, eventY))
setText("");
}
        return super.onTouchEvent( acara);
}


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

}
Boleh dilukis latar belakang EditText:

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" />
< corners android:radius="5dp" />
<stroke android:width="1px" android:color="@color/frame_search"/>
</shape>

颜色资源:color.xml

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

布局文件:activity_main.xml

< 0. :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">

& lt; demo.com.jay.buttondemo.deledittex "
         android:layout_margin="10dp"
          android:background="../style/images/bg_frame_search"
        android:hint="带删除按的🎜         android:hint="带删除按的🎜 :maxLength= "20"
        android:padding="5dp"
         android:singleLine="true" />


</LinearLayout>
<🎜

PS: Kod ini sangat mudah, jadi saya tidak akan menerangkannya~


2 Melaksanakan kata laluan EditText yang kelihatan dan tidak kelihatan

Ini juga sangat praktikal. keperluan, iaitu Selepas pengguna mengklik butang, kata laluan dalam EditText boleh dilihat atau tidak kelihatan~

Rendering pelaksanaan:

2.gif

Kod pelaksanaan: 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="Password visible"/>

</LinearLayout>

MainActivity.java


pakej 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;

kelas awam MainActivity melanjutkan AppCompatActivity {

    pribadi BuditText edit_pawd>;   edit_pawd>;        t_private <🎜 >    boolean peribadi flag = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);<🎜 >   Content ViewRent. >        edit_pawd = (EditText) findViewById(R.id.edit_pawd);
        btnChange = (Button) findViewById(R.id.btnChange);
        edit_pawd.set Trurently);    //设置EditText不换行
        btnChange.setOnClickListener(new View.OnClickListener() {
            @Override<  >          view 🎜>                 jika(bendera == benar){
edit_pawd.setTransformationMethod (hiderEturnStransformationMethod.getInstance ());
flag = false;                     bendera = benar;
btnChange.setText("Kata laluan kelihatan");
                                                                                                                                                                                                                     🎜><? xml version="1.0" encoding="utf-8"?>http
.android.com/apk/res/android" >

<!--Tetapkan warna latar belakang lutsinar -->
<android pepejal:color="#FFFFFF" />

<!--Tetapkan sempadan putih -->
<strok
android:width="1px"
android:color="#FFFFFF" //>
<!--Tetapkan jidar untuk menjadikan ruang lebih besar --> ;
<padding
android:bottom="5dp"
android:left="5dp"
android :right="5dp"
android:top="5dp" / >

</shape>



Ringkasan bahagian ini:

Itu sahaja untuk bahagian ini, terima kasih~