EditText (kotak input) penerangan terperinci


Pengenalan kepada bahagian ini:

Dalam bahagian sebelumnya kita telah mengetahui tentang kawalan UI pertama TextView (kotak teks) Artikel ini memberikan banyak kemungkinan pertemuan dalam pembangunan sebenar. Beberapa keperluan Penyelesaian itu seharusnya membawa kemudahan kepada pembangunan anda Dalam bahagian ini, kita akan mempelajari kawalan kedua yang sangat biasa digunakan EditText (kotak input) ; Sangat serupa dengan TextView, perbezaan terbesar ialah: EditText boleh menerima input pengguna! Seperti sebelum ini, kita tidak akan bercakap tentang atribut satu demi satu. Kami hanya bercakap tentang aplikasi praktikal Jika anda ingin memotong atribut, anda boleh melihat sendiri dokumentasi API: Dokumentasi API kemudian mulakan bahagian ini!


1. Tetapkan teks gesaan lalai

Seperti yang ditunjukkan di bawah, saya percaya anda tidak biasa dengan antara muka log masuk pengguna ini, bukan? 🎜>

1.pngBerbanding dengan jenis yang lain, bagaimana dengan yang berikut?

2.png Sudah tentu, saya tidak akan menyiarkan reka letak di sini di sini kami hanya memperkenalkan dua atribut kawalan teks gesaan lalai:

Teks gesaan lalai Kedua-dua atribut adalah seperti berikut:

android:hint="Default prompt text"
android:textColorHint="#95A1AA"

The bekas menetapkan kandungan teks gesaan , yang terakhir menetapkan warna teks gesaan!

2 Pilih semua kandungan teks dalam komponen selepas mendapat fokus

Apabila kami mengklik pada kotak input kami dan mendapatkan fokus, kami tidak menggerakkan kursor ke permulaan atau akhir. teks itu; Dapatkan semua kandungan teks dalam kotak input! Pada masa ini kita boleh menggunakan atribut

selectAllOnFocus

android:selectAllOnFocus="true"
Sebagai contoh, pemaparan berikut: Yang pertama mempunyai set atribut ini, dan yang kedua tidak menetapkan atribut ini Selepas set EditText kepada true mendapat fokus Semua teks dipilih!

3.gif

3 Hadkan jenis input EditText

Kadang-kadang kami mungkin perlu mengehadkan data input, seperti apabila memasukkan nombor telefon, anda masukkan Rentetan huruf, ini Jelas sekali ia tidak memenuhi jangkaan kami, dan mengehadkan jenis input boleh dicapai melalui atribut inputType!

Sebagai contoh, sekatan hanya boleh nombor telefon, kata laluan (

textPassword

): android:layout_height="wrap_content" android:inputType="phone" />

可选参数如下:

文本类型,多为大写、小写和数字><第🎜:><🎜 inputType= "none"  android:inputType="text"  

android:inputType="textCapCharacters"  
android:inputType="textCapWords"  
android:inputType="textCapCharacters"  "textAutoCorrect"  
android:inputType="textAutoComplete"  
android:inputType="textMultiLine"  
android:inputType="textImeMultiLine"  
android:inputType="textMultiLine"  
android:inputType="textImeMultiLine"  
android:input Type
android:input Type="textMultiLine" "textUri"  
android:inputType="textEmailAddress"  
android:inputType="textEmailSubject"  
android:inputType="textShortMessage"  
android:inputType=" android🎜=Type="textLongMessage" "textPersonName"  
android:inputType="textPostalAddress"  
android:inputType="textPassword"  
android:inputType="textVisiblePassword"  
android:inputType="textPassword"  
android:inputType="textVisiblePassword"  
android:input Type="xtextPassword" "textFilter"  
android:inputType="textPhonetic"


数值类型

android:inputType="number" > <🎜 :inputType="numberSigned"  

android:inputType="numberDecimal"  
android:inputType="phone"//拨号键盘  
android:inputType="datetime"   
android: //日期键盘  
android:inputType="time"//时间键盘


4. Tetapkan baris minimum, baris maksimum, baris tunggal, berbilang baris, pembalut baris automatik

EditText memaparkan berbilang baris secara lalai dan boleh membalut secara automatik, iaitu, apabila satu baris tidak dapat dipaparkan sepenuhnya, Ia akan bertukar secara automatik ke baris kedua

4.png

Kami boleh mengehadkannya, seperti
Tetapkan bilangan baris minimum: android: minLines ="3"
Atau tetapkan bilangan baris maksimum dalam EditText: android:maxLines="3"
PS: Apabila kandungan input melebihi maxline, teks akan secara automatik tatal ke atas! !

Selain itu, banyak kali kita mungkin perlu mengehadkan EditText untuk hanya membenarkan input satu baris tanpa menatal, seperti antara muka log masuk di atas. Sebagai contoh, kita hanya perlu menetapkan

android:singleLine="true"</p>
<p>
untuk mencapai input satu baris tanpa pemisah baris</ p>

<hr />

<h2>5 Tetapkan jarak teks dan tetapkan jenis huruf besar bahasa Inggeris</h2>

<p>. ;Kita boleh lulus Dua atribut berikut digunakan untuk menetapkan jarak antara perkataan:
</p>
<pre>
android:textScaleX="1.5" //Tetapkan jarak mendatar antara perkataan
android: textScaleY="1.5" //Tetapkan jarak menegak antara perkataan

Selain itu, EditText juga memberikan kami atribut untuk menetapkan jenis huruf besar huruf Inggeris: android:capitalizeLalainya ialah tiada dan tiga nilai pilihan disediakan:

  • ayat: Hanya huruf pertama ditulis dengan huruf besar

  • perkataan: Saiz huruf pertama setiap perkataan, gunakan ruang untuk membezakan perkataan

  • aksara:Setiap huruf Inggeris ditulis dengan huruf besar


6. Kawal jarak jarak sekitar EditText

Kami menggunakan atribut berkaitan margin untuk meningkatkan jarak antara komponen dan kawalan lain, seperti android:marginTop = "5dp" Gunakan padding untuk meningkatkan jarak antara teks dalam komponen dan sempadan komponen, seperti android:paddingTop = "5dp"


7 fokus dan timbulkan papan kekunci kecil

Berkenaan isu EditText mendapat tumpuan dan muncul papan kekunci kecil, saya bergelut dengannya untuk seketika dalam projek baru-baru ini. Keperluannya ialah: selepas memasuki Aktiviti, biarkan EditText memperoleh fokus dan muncul papan kekunci kecil untuk input pengguna! Saya telah mencuba banyak kaedah dalam talian tetapi tidak ada yang berkesan. Saya tidak tahu sama ada ia disebabkan oleh masalah sistem 5.1 yang saya gunakan! Berikut ialah ringkasan:

Pertama, biarkan EditText mendapat fokus dan fokus yang jelas

edit.minta Fokus(); //Permintaan untuk mendapatkan fokus
edit.clearFocus(); //Clear focus

Selepas memperoleh fokus, papan kekunci kecil muncul di atas:

  • Dalam versi sistem yang lebih rendah, hanya requestFokus dan papan kekunci kecil akan muncul secara automatik

  • Versi yang lebih tinggi sedikit memerlukan kami memainkan papan kekunci secara manual: Yang pertama:

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput_Shod(0, InputMethodManager) 🎜>
Jenis kedua:

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); putFromWindow (view.getWindowToken(), 0); //Paksa untuk menyembunyikan papan kekunci

Saya tidak tahu mengapa, tetapi dua kaedah di atas tidak muncul pada papan kekunci kecil Pengarang akhirnya menggunakan: atribut windowSoftInputMode untuk menyelesaikan masalah muncul papan kekunci kecil yang saya mahu untuk berkongsi dengan anda di sini:

android:windowSoftInputModeMod interaksi antara tetingkap utama Aktiviti dan papan kekunci lembut boleh digunakan untuk mengelakkan masalah oklusi panel kaedah input, a ciri baharu selepas Android 1.5.
Atribut ini boleh menjejaskan dua perkara:
[1] Apabila fokus dijana, sama ada papan kekunci lembut disembunyikan atau dipaparkan
[2] Sama ada untuk mengurangkan saiz tetingkap utama yang aktif untuk memberi ruang kepada papan kekunci lembut

Titik mudah ialah kawalan papan kekunci apabila terdapat fokus dan sama ada untuk mengurangkan saiz tetingkap Act untuk meletakkan papan kekunci kecil
Nilai berikut tersedia, dan berbilang nilai boleh ditetapkan, dipisahkan dengan "|"
stateUnspecified: Keadaan papan kekunci lembut tidak ditentukan, sistem akan memilih keadaan yang sesuai atau bergantung pada tetapan tema
stateUnchanged: Apabila aktiviti ini muncul, papan kekunci lembut akan Sentiasa mengekalkan keadaan dalam aktiviti sebelumnya, sama ada tersembunyi atau dipaparkan
stateHidden: Apabila pengguna memilih aktiviti, papan kekunci lembut sentiasa tersembunyi
stateAlwaysHidden: Apabila pengguna memilih aktiviti Apabila tetingkap utama Activity mendapat fokus, papan kekunci lembut sentiasa tersembunyi
stateVisible: Papan kekunci lembut biasanya kelihatan
stateAlwaysVisible: Apabila pengguna memilih aktiviti, papan kekunci lembut Sentiasa dipaparkan keadaan
adjustUnspecified: Tetapan lalai, biasanya sistem memutuskan sama ada untuk menyembunyikan atau memaparkan
adjustResize: Aktiviti ini sentiasa melaraskan saiz skrin untuk meninggalkan ruang untuk ruang papan kekunci Lembut
adjustPan: Kandungan tetingkap semasa akan dialihkan secara automatik supaya fokus semasa tidak pernah dilindungi oleh papan kekunci dan pengguna sentiasa boleh melihat bahagian input

Kami boleh menetapkan atribut ini dalam AndroidManifest.xml untuk Aktiviti yang perlu muncul papan kekunci kecil, seperti:

5.png

dan kemudian requestFocus() pada objek EditText~


8 Kawalan kedudukan kursor EditText

Kadang-kadang kita mungkin perlu. kawal kursor dalam EditText untuk bergerak ke kedudukan tertentu atau pilih beberapa teks!
EditText memberikan kami kaedah setSelection() Kaedah ini mempunyai dua bentuk:

6.png
Satu parameter adalah untuk menetapkan kedudukan kursor dan dua parameter ialah. bahagian tertutup antara menetapkan kedudukan permulaan dan kedudukan penamat, iaitu, sebahagiannya dipilih!
Sudah tentu kami juga boleh memanggil setSelectAllOnFocus(true) untuk memilih semua teks apabila EditText mendapat fokus!
Selain itu, kami juga boleh memanggil setCursorVisible(false); untuk menetapkan kursor supaya tidak dipaparkan
Kami juga boleh memanggil getSelectionStart() dan getSelectionEnd untuk mendapatkan kursor semasa Kedudukan hadapan dan belakang


9 Pelaksanaan EditText yang ringkas dengan emotikon

Saya percaya anda sudah biasa dengan QQ atau WeChat Apabila kami menghantar teks, kami boleh menghantarnya bersama-sama dengan emotikon kaedah Kaedah pelaksanaan:

1 Gunakan SpannableString untuk melaksanakan
2. Gunakan kelas Html untuk melaksanakan
Di sini pengarang menggunakan kesan yang pertama sahaja Ekstrak kaedah dan sesuaikan EditText
Anda juga boleh menulis kotak input sendiri dengan pelbagai pilihan ekspresi yang serupa dengan QQ!

Lihat pemaparan (klik untuk menambah ungkapan untuk melengkapkan penambahan ungkapan):

7.png

Kod ini juga sangat mudah:

kelas awam MainActivity melanjutkan Aktiviti {
    pribadi Butang btn_add;
    peribadi EditText edit_one;
    @Override      @Override  <🎜 stanceState) {
        super.onCreate(savedInstanceState );
        setContentView(R.layout.activity_main);
        btn_add = (Button) findViewById(R.id.btn_add);
      =  Edit_edit View (x.
          btn_add.setOnClickListener(new OnClickListener() {
            @Override
             public void onClick(Lihat v)                                                        boleh boleh spanStr = new SpannableString("imge");
                Drawable drawable = MainActivity.this. getResources().getDrawable(R.drawable.f045);
                drawable.setBounds(0,0,drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight());
        S           S Image boleh dilukis, ImageSpan. ALIGN_BASELINE);
                 spanStr.setSpan(span,0,4,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                int kursor =  Start_t. >  pilih   edit_one.getText().insert(cursor, spanStr);
            }
        });
    }
}

PS: By the way, jangan lupa letak gambar~


10 EditText with delete button

Kami sering melihat ini pada antara muka input App. :

8.png

Apabila kita memasukkan kandungan, ikon pangkah kecil seperti itu akan muncul di sebelah kanan Selepas kita mengkliknya, kandungan dalam kotak input akan dikosongkan!
Pelaksanaan sebenarnya sangat mudah:
Tetapkan addTextChangedListener untuk EditText, dan kemudian tulis semula kaedah abstrak dalam TextWatcher(), yang digunakan untuk memantau perubahan dalam kotak input kemudian setCompoundDrawablesWithIntrinsicBounds untuk menetapkan gambar salib kecil ; akhirnya, tulis semula Tulis kaedah onTouchEvent Jika kawasan klik ialah kedudukan gambar silang kecil, kosongkan teks.

Kod pelaksanaan adalah seperti berikut:

kelas awam EditTextWithDel melanjutkan EditText {

    pribadi akhir statik String TAG = "EditTextWithDel";
    pribadi Drawable; img Drawable; ble;
    konteks mKonteks peribadi;< . EditTextWithDel(Konteks konteks, AttributeSet attrs) {
        super(context, attrs);
        mContext = context;
        init();
     }
< context                                                            ... tributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        mContext = context;
        init();
    }

    }

    }

    }

    }

    }

     }

     }

     }

     }
<🎜                                                        imgInable = mContext. getResources (). >                                                                                                                                                                                                                                            >       >
            @Override
            terkosong awam selepasTextChanged(Boleh Diedit s) {
                setDrawable();
            }
        });
        setDrawable();
    }

    // 设置删除图片
                      sendiri (panjang() < 1)
            setCompoundDrawablesWithIntrinsicBounds(null, null, null, null);
        else
            setCompoundDrawablesBounds,     }

    // 处理删除事件
@Override
public boolean OnTouchEvent (MotionEvent Event) {
if (imginable! = Null && event.getAction () == MotionEvent.Action_up) {
int eventx = (int) event.getRawx ();
            int eventY = (int) event.getRawY();
            Log.e(TAG, "eventX = " + eventX + "; eventY     >                                                                                                                                                                                                          = baru Rect() ;
getGlobalVisiblerect (rect); rect.left = rect.right-100;
if (rect.contains (eventx, eventy))
settext (""); 🎜> kembali super.ontouchEvent (event); }
@Override
dilindungi void finalis () melemparkan lontar {
super.finalize ();

Ringkasan bahagian ini:

Bahagian ini memperkenalkan anda kepada kawalan EditText (kotak input) dalam kawalan UI Android Sudah tentu, situasi di atas pasti tidak akan tercapai keperluan sebenar pembangunan sebenar Kita mungkin perlu menyesuaikan EditText mengikut keperluan kita sendiri! Sudah tentu, ini melibatkan topik kawalan tersuai yang lebih lanjut Di bahagian lanjutan, kami akan menerangkan secara terperinci kawalan tersuai dalam Android! Kini anda boleh menggunakannya~