前言
EditTex是Android中比較常用的一個(gè)控件,可以說它是用戶和Android應(yīng)用進(jìn)行數(shù)據(jù)傳遞的通道.通過它,用戶可以把數(shù)據(jù)傳給App,然后我們可以獲取到用戶輸入的數(shù)據(jù).
EditText是TextView的子類,它繼承了TextView的所有屬性.在實(shí)際開發(fā)中我們可能會(huì)根據(jù)開發(fā)需求,自定義出比較美觀的EditText控件,這里我們不說自定義EditText.主要說一下EditText使用中的細(xì)節(jié).以及使用EditText過程中遇到的坑...
EditText屬性(API 24)
- android:hint //設(shè)置hint提示文本
- android:textColorHint //設(shè)置hint提示文字顏色
- android:textColor //設(shè)置文字顏色
- android:textSize //設(shè)置文本字體大小
- android:textStyle //設(shè)置文本字體樣式,bold(加粗),italic(傾斜),normal(默認(rèn)是正常字體).
- android:numeric //控制EditText輸入數(shù)字的類型 decimal(浮點(diǎn)數(shù)),integer(正整數(shù)),signed(帶+ -號(hào)的整數(shù)).注意:該屬性在使用時(shí)提示已過時(shí),建議使用android:inputType屬性替代.
- android:singleLine //設(shè)置是否單行輸入 true(單行輸入),false(會(huì)自動(dòng)換行).注意:蓋屬性在使用時(shí)提示已過時(shí),建議使用android:maxLines="1"屬性替代.
- android:password="true" //以密文的形式顯示輸入的文本.注意:該屬性在使用時(shí)提示已過時(shí),建議使用android:inputType屬性替代.
- android:textAlignment //設(shè)置EditText中文本顯示的位置,center(居中),inherit(默認(rèn),居左邊顯示),viewStart(居左顯示),viewEnd(居右顯示),textStart(居左顯示),textEnd(居右顯示).這里需要注意的是最低支持的API版本是17,前兩個(gè)可以在API14中使用,而后面使用就會(huì)報(bào)紅線...
- android:textColorHighlight //設(shè)置被選中字體的顏色.默認(rèn)為 Theme 主題中的 “colorAccent”的顏色.
- textCursorDrawable //設(shè)置被光標(biāo)的顏色.默認(rèn)為 Theme 主題中的 “colorAccent”的顏色.
- android:textScaleX //設(shè)置文本的水平縮放系數(shù).
- android:typeface //設(shè)置hint提示文本的字體.normal(默認(rèn)),monospace,sans,serif.這里就不解釋了,大家試一下就能看出效果.
- android:background //設(shè)置EditText背景."@null"設(shè)置背景為透明.當(dāng)我們?cè)O(shè)置背景后,EditText的那條線就會(huì)消失.
- android:textAppearance //設(shè)置文本的顏色,字體,大小和樣式.
- android:digits //設(shè)置只接收指定的文本內(nèi)容.
- android:phoneNumber="true" //設(shè)置輸入電話號(hào)碼.注意:該屬性在使用時(shí)提示已過時(shí),建議使用android:inputType屬性替代.
- android:editable //設(shè)置EditText是否可以編輯.當(dāng)你設(shè)置為true,會(huì)提示你該EditText已經(jīng)是可編輯的.設(shè)置為false時(shí)會(huì)提示使用inputType替代.
- android:inputType //設(shè)置文本的類型,用于幫助輸入法顯示合適的鍵盤類型.
- android:maxLength //設(shè)置EditText最多接受的文本的個(gè)數(shù).
- android:lines //設(shè)置EditText顯示的行數(shù),設(shè)置兩行就顯示兩行坠宴,即使第二行沒有數(shù)據(jù).
- android:lineSpacingExtra //設(shè)置行間距.
- android:lineSpacingMultiplier //設(shè)置行間距的倍數(shù). 如設(shè)置成1.5倍.
- android:imeOptions //設(shè)置右下角IME動(dòng)作與編輯框相關(guān)的動(dòng)作以躯,如actionDone右下角將顯示一個(gè)“完成”,而不設(shè)置默認(rèn)是一個(gè)回車符號(hào).下面會(huì)詳細(xì)說明.
使用細(xì)節(jié)
我們?cè)谑褂肊ditText中有時(shí)候會(huì)限制輸入框中輸入的文本類型,或者當(dāng)彈出軟鍵盤時(shí),出現(xiàn)的是比較合適的輸入法.如:我們?cè)诳劭蹠r(shí),彈出的軟件盤顯示的就是數(shù)字,當(dāng)輸入密碼時(shí),右下角編輯框顯示的是"完成",點(diǎn)擊即會(huì)關(guān)閉軟鍵盤.其實(shí)這也就是inputType和imeOptions屬性來實(shí)現(xiàn)的,inputType屬性可以指定鍵盤的類型,而imeOptions指定鍵盤右下角顯示的Action.下面我們就來實(shí)現(xiàn)EditText使用過程中的小細(xì)節(jié).
-
這個(gè)類似QQ登錄輸入框,第一個(gè)EditText(用戶名)的inputType設(shè)置的是text,imeOptions設(shè)置的是actionNext(下一個(gè)).第二個(gè)EditText(密碼)的inputType設(shè)置的是textPassword,imeOptions設(shè)置的是actionDone(完成).當(dāng)輸入完用戶名,點(diǎn)擊鍵盤action下一個(gè),會(huì)跳到密碼輸入框,當(dāng)輸入完密碼后,點(diǎn)擊鍵盤action完成,軟鍵盤就會(huì)隱藏.來看下效果圖就明白來.
效果圖:
Xml布局:
<EditText android:id="@+id/et_user_name" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="請(qǐng)輸入用戶名..." android:imeOptions="actionNext" android:inputType="text" android:textColor="@color/black" /> <EditText android:id="@+id/et_password" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="請(qǐng)輸入密碼..." android:imeOptions="actionDone" android:inputType="textPassword" android:textColor="@color/black" />
注意:這里需要注意的是,如果想讓鍵盤顯示Action,需要inputType和imeOptions結(jié)合使用才可以,只使用imeOptions是不會(huì)有效果的.只會(huì)顯示默認(rèn)的換行action.(不同手機(jī)的輸入法不一樣,可能顯示的會(huì)有點(diǎn)小差別)
-
接下來我們看一下inputType可以接受的參數(shù):
我們可以使用android:inputType屬性指定要用于EditText對(duì)象的鍵盤類型.例如,如果你希望用戶輸入電子郵件地址啄踊,則應(yīng)使用textEmailAddress輸入類型.以下是輸入類型常見的值:
- "text" 普通文本鍵盤
- "textEmailAddress" 帶有@字符的普通文本鍵盤
- "textUri" 帶有/字符的普通文本鍵盤.
- "number" 基本數(shù)字鍵盤.
- "phone" 電話樣式鍵盤.
- "datetime" 時(shí)間日期.
- "date" 日期.
android:inputType還允許指定某些鍵盤行為,例如是否大寫所有新單詞或使用自動(dòng)完成和拼寫建議等功能.以下是定義鍵盤行為的一些常見輸入類型值:
- "textCapSentences" 普通的文本鍵盤,大寫每個(gè)新句子的第一個(gè)字母.
- "textCapWords" 大寫每個(gè)單詞的正常文本鍵盤.適合標(biāo)題或人名.
- "textAutoCorrect" 正常文本鍵盤,可糾正拼寫錯(cuò)誤的字詞.
- "textPassword" 這個(gè)就和設(shè)置password="true"是一樣的效果.以原點(diǎn)的形式顯示輸入的文本.
- "textMultiLine" 普通文本鍵盤,允許用戶輸入包含換行符的長字符串(回車符).
-
上面演示第一個(gè)小栗子時(shí),說了當(dāng)需要指定鍵盤action時(shí),需要和inputType結(jié)合使用才會(huì)有效果,下面就來看下imeOptions可以接受的參數(shù):下面直接來張圖,大家一看就明白了.上圖....
在代碼中我們可以響應(yīng)action操作的事件.如xml布局中有一個(gè)id為search的EditText控件,并指定imeOptions="actionSearch",我們可以指定action操作的事件.
EditText editText = (EditText) findViewById(R.id.search); editText.setOnEditorActionListener(new OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { boolean handled = false; if (actionId == EditorInfo.IME_ACTION_SEND) { Toast.makeText(this, "點(diǎn)擊actionSearch執(zhí)行的操作 ", Toast.LENGTH_SHORT).show(); handled = true; } return handled; } });
注意:再次提醒,在使用imeOptions時(shí),如果你沒有使用inputType屬性,是不會(huì)有效果的.如果你還在使用Eclipse開發(fā),可能還會(huì)用到android:singleLine="true"這一屬性.
最后一個(gè)就是使用EditText中遇到的坑了....相信大多數(shù)開發(fā)者都遇到過,那就是當(dāng)你的EditText輸入框在屏幕的下方時(shí),彈出軟鍵盤會(huì)遮擋住輸入框...當(dāng)然,你可以使用ScrollView嵌套EditText來解決這一問題.但我最近看到一篇文章,感覺很優(yōu)雅的就解決了這個(gè)問題.下面貼出文章地址,我就不羅嗦了.軟鍵盤擋住輸入框問題的終極解決方案.