一:新建HelloEditText工程
新建一個Hello world詳細步驟能夠參見javascript
Android教程之三:第一個Android應用,HelloWorldhtml
建立設置以下:java
- Project name: HelloEditText
- Build Target :android 2.2
- Application name:HelloEditText
- Package name:com.flysnow
- create Activity: HelloEditText
- min SDK 8
這時候運行還看不到EditText,由於咱們尚未加上,修改main.xml以下:android
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <EditText
- android:id="@+id/edit_text"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="這是一個EditText"/>
- </LinearLayout>
這裏添加了一個id爲"edit_text"的EditText,設置默認顯示爲本爲「這是一個EditText」。。運行效果以下:app
二:EditText簡介
EditText是一個很是重要的組件,能夠說它是用戶和Android應用進行數據傳輸窗戶,有了它就等於有了一扇和Android應用傳輸的門,經過它用戶能夠把數據傳給Android應用,而後獲得咱們想要的數據。ide
EditText是TextView的子類,因此TextView的方法和特性一樣存在於EditText中,具體的TextView的介紹能夠參考上一節Android系列教程之六:TextView小組件的使用--附帶超連接和跑馬燈效果測試
三:長度和空白提示文字,提示文字顏色,是否可編輯等
EditText有一些屬性能夠設置EditText的特性,好比最大長度,空白提示文字等。ui
- 有時候咱們有一些特屬的須要,要求只能在EditText中輸入特定個數的字符,好比身份證號、手機號嗎等。這時候就能夠經過android:maxLength屬性來設置最大輸入字符個數,好比android:maxLength=「4」就表示最多能輸入4個字符,再多了就輸入不進去了。
- 空白提示文字。有時候咱們須要說明你定義的這個EditText是作什麼用的,好比讓輸入「用戶名」,或者輸入「電話號碼」等,可是你又不想在EditText前面加一個TextView來講明這是輸入「用戶名」的,由於這會使用一個TextView,那麼怎麼辦呢?EditText爲咱們提供了android:hint來設置當EditText內容爲空時顯示的文本,這個文本只在EditText爲空時顯示,你輸入字符的時候就消失了,不影響你的EditText的文本。。修改main.xml以下:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <EditText
- android:id="@+id/edit_text"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:maxLength="40"
- android:hint="請輸入用戶名..."/>
- </LinearLayout>
運行應用就會看到以下的效果:
看看吧,簡潔明瞭還不用新增一個TextView說明,也不影響用戶操做。
- 上面列出了空白時的提示文字,有的人說了,我不想要這個灰色的提示文字,和個人應用總體風格不協調,那也行啊,咱們能夠換顏色,怎麼換呢,就是經過android:textColorHint屬性設置你想要的顏色。修改main.xml以下:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <EditText
- android:id="@+id/edit_text"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:maxLength="40"
- android:hint="請輸入用戶名..."
- android:textColorHint="#238745"/>
- </LinearLayout>
運行程序效果以下:
看到了吧,顏色已經變了。。
- 還有一個比較實用的功能,就是設置EditText的不可編輯。設置android:enabled="false"能夠實現不可編輯,能夠得到焦點。這時候咱們看到EditText和一個TextView差很少:
- 實現相似html中Textarea的文本域。在Android中沒有專門的文本域組件,可是能夠經過設置EditText的高來實現一樣的文本域功能。修改main.xml以下:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <EditText
- android:id="@+id/edit_text"
- android:layout_width="fill_parent"
- android:layout_height="200dip"/>
- </LinearLayout>
運行程序效果以下:
四:輸入特殊格式的字符
在咱們開發程序的時候難免會輸入一些特屬個數的字符,好比密碼(輸入框的字符要加密顯示),電話號碼(好比數字和-),數字等,這些都算是一些特屬格式的字符,強大的EditText一樣爲咱們提供了輸入這些特屬格式字符的設置。this
- 密碼文本框。密碼輸入也是Android應用經常使用的功能,經過配置EditText的android:password="true"就能夠實現這一密碼輸入功能,修改main.xml以下:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <EditText
- android:id="@+id/edit_text"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:password="true"/>
- </LinearLayout>
運行效果以下:
能夠看到咱們輸入的字符已經被「.」這樣的掩碼所代替。
- 手機中發短信打電話是必不可少的,因此用於專門輸入電話號碼的文本框也是大有用途,有了他咱們對是不是電話號碼的校驗就容易的多了(由於字符是正確的,只要校驗格式 ).經過設置android:phoneNumber="true"就能夠把EditText變成只接受電話號碼輸入的文本框,連軟鍵盤都已經變成撥號專用軟鍵盤了,因此不用再擔憂輸入其餘字符了。修改main.xml以下:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <EditText
- android:id="@+id/edit_text"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:phoneNumber="true"/>
- </LinearLayout>
運行程序效果以下:
注意看軟鍵盤,已經變成撥號專用的啦.
- 有時候咱們只想輸入數字,不想輸入字母,EditText爲咱們提供了android:numeric來控制輸入的數字類型,一共有三種分別爲integer(正整數)、signed(帶符號整數)和decimal(浮點數)。這裏以signed類型的爲例,修改main.xml以下:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <EditText
- android:id="@+id/edit_text"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:numeric="signed"/>
- </LinearLayout>
運行效果以下:
注意這裏的軟鍵盤變成「數字鍵盤」的變化.
五:爲文本指定特定的軟鍵盤類型
前面咱們經過指定爲電話號碼特定格式,而後鍵盤類型變成了撥號專用的鍵盤,這個是自動變的,其實咱們也能夠通過android:inputType來設置文本的類型,讓輸入法選擇合適的軟鍵盤的。。android:inputType有不少類型,這裏使用date類型來演示,修改main.xml以下:
加密
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <EditText
- android:id="@+id/edit_text"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:inputType="date"/>
- </LinearLayout>
運行效果以下:
六:Enter鍵圖標的設置
軟鍵盤的Enter鍵默認顯示的是「完成」文本,咱們知道按Enter建表示前置工做已經準備完畢了,要去什麼什麼啦。好比,在一個搜索中,咱們輸入要搜索的文本,而後按Enter表示要去搜索了,可是默認的Enter鍵顯示的是「完成」文本,看着不太合適,不符合搜索的語義,若是能顯示「搜索」兩個字或者顯示一個表示搜索的圖標多好。事實證實咱們的想法是合理的,Android也爲咱們提供的這樣的功能。經過設置android:imeOptions來改變默認的「完成」文本。這裏舉幾個經常使用的常量值:
- actionUnspecified 未指定,對應常量EditorInfo.IME_ACTION_UNSPECIFIED.效果:
- actionNone 沒有動做,對應常量EditorInfo.IME_ACTION_NONE 效果:
- actionGo 去往,對應常量EditorInfo.IME_ACTION_GO 效果:
- actionSearch 搜索,對應常量EditorInfo.IME_ACTION_SEARCH 效果:
- actionSend 發送,對應常量EditorInfo.IME_ACTION_SEND 效果:
- actionNext 下一個,對應常量EditorInfo.IME_ACTION_NEXT 效果:
- actionDone 完成,對應常量EditorInfo.IME_ACTION_DONE 效果:
下面已搜索爲例,演示一個實例,修改main.xml以下:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <EditText
- android:id="@+id/edit_text"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:imeOptions="actionSearch"/>
- </LinearLayout>
修改HelloEditText以下:
- package com.flysnow;
-
- import android.app.Activity;
- import android.os.Bundle;
- import android.view.KeyEvent;
- import android.widget.EditText;
- import android.widget.TextView;
- import android.widget.Toast;
- import android.widget.TextView.OnEditorActionListener;
-
- public class HelloEditText extends Activity {
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- EditText editText=(EditText)findViewById(R.id.edit_text);
- editText.setOnEditorActionListener(new OnEditorActionListener() {
- @Override
- public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
- Toast.makeText(HelloEditText.this, String.valueOf(actionId), Toast.LENGTH_SHORT).show();
- return false;
- }
- });
- }
- }
運行程序,點擊回車(也就是搜索圖標軟鍵盤按鈕)會顯示該actionId.咱們上面的每個設置都會對應一個常量,這裏的actionId就是那個常量值。
七:EditText的取值、全選、部分選擇、獲取選中文本
下面經過一個例子來演示EditText的取值、全選、部分選擇和獲取選中文本.main.xml修改以下:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <EditText
- android:id="@+id/edit_text"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:imeOptions="actionSearch"/>
- <Button
- android:id="@+id/btn_get_value"
- android:text="取值"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"/>
- <Button
- android:id="@+id/btn_all"
- android:text="全選"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"/>
- <Button
- android:id="@+id/btn_select"
- android:text="從第2個字符開始選擇"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"/>
- <Button
- android:id="@+id/btn_get_select"
- android:text="獲取選中文本"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"/>
- </LinearLayout>
HelloEditText修改以下:
- package com.flysnow;
-
- import android.app.Activity;
- import android.os.Bundle;
- import android.text.Editable;
- import android.text.Selection;
- import android.view.KeyEvent;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- import android.widget.EditText;
- import android.widget.TextView;
- import android.widget.Toast;
- import android.widget.TextView.OnEditorActionListener;
- /**
- * EditText演示
- * @author 飛雪無情
- * @since 2010-11-29
- */
- public class HelloEditText extends Activity {
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- final EditText editText=(EditText)findViewById(R.id.edit_text);
- //監聽回車鍵
- editText.setOnEditorActionListener(new OnEditorActionListener() {
- @Override
- public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
- Toast.makeText(HelloEditText.this, String.valueOf(actionId), Toast.LENGTH_SHORT).show();
- return false;
- }
- });
- //獲取EditText文本
- Button getValue=(Button)findViewById(R.id.btn_get_value);
- getValue.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- Toast.makeText(HelloEditText.this, editText.getText().toString(), Toast.LENGTH_SHORT).show();
- }
- });
- //讓EditText全選
- Button all=(Button)findViewById(R.id.btn_all);
- all.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- editText.selectAll();
- }
- });
- //從第2個字符開始選擇EditText文本
- Button select=(Button)findViewById(R.id.btn_select);
- select.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- Editable editable=editText.getText();
- Selection.setSelection(editable, 1,editable.length());
- }
- });
- //獲取選中的文本
- Button getSelect=(Button)findViewById(R.id.btn_get_select);
- getSelect.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- int start=editText.getSelectionStart();
- int end=editText.getSelectionEnd();
- CharSequence selectText=editText.getText().subSequence(start, end);
- Toast.makeText(HelloEditText.this, selectText, Toast.LENGTH_SHORT).show();
- }
- });
- }
- /**
- * 交換兩個索引
- * @param start 開始索引
- * @param end 結束索引
- */
- protected void switchIndex(int start, int end) {
- int temp=start;
- start=end;
- end=temp;
- }
- }
運行效果以下:
能夠經過輸入文字和點擊下面的按鈕測試。
八:小結
這結詳細介紹了EditText的大部分特性和經常使用功能,如經常使用的密碼框,獲取值等等。這幾天忙的沒更新,此次更新個長的。能夠夠消化一陣子的。