android編程EditText使用

轉自::http://flysnow.iteye.com/blog/828415

 

一:新建HelloEditText工程

 

新建一個Hello world詳細步驟可以參見

Android教程之三:第一個Android應用,HelloWorld

創建設置如下:

  1. Project name:HelloEditText
  2. Build Target :android 2.2
  3. Application name:HelloEditText
  4. Package name:com.flysnow
  5. create Activity:HelloEditText
  6. min SDK 8

這時候運行還看不到EditText,因爲我們還沒有加上,修改main.xml如下:

Xml代碼 複製代碼 收藏代碼
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent"
  6. >
  7. <EditText
  8. android:id="@+id/edit_text"
  9. android:layout_width="fill_parent"
  10. android:layout_height="wrap_content"
  11. android:text="這是一個EditText"/>
  12. </LinearLayout>

這裏添加了一個id爲"edit_text"的EditText,設置默認顯示爲本爲“這是一個EditText”。。運行效果如下:


二:EditText簡介

EditText是一個非常重要的組件,可以說它是用戶和Android應用進行數據傳輸窗戶,有了它就等於有了一扇和Android應用傳輸的門,通過它用戶可以把數據傳給Android應用,然後得到我們想要的數據。

EditText是TextView的子類,所以TextView的方法和特性同樣存在於EditText中,具體的TextView的介紹可以參考上一節Android系列教程之六:TextView小組件的使用--附帶超鏈接和跑馬燈效果

 

三:長度和空白提示文字,提示文字顏色,是否可編輯等

EditText有一些屬性可以設置EditText的特性,比如最大長度,空白提示文字等。

  1. 有時候我們有一些特屬的需要,要求只能在EditText中輸入特定個數的字符,比如身份證號、手機號嗎等。這時候就可以通過android:maxLength屬性來設置最大輸入字符個數,比如android:maxLength=“4”就表示最多能輸入4個字符,再多了就輸入不進去了。
  2. 空白提示文字。有時候我們需要說明你定義的這個EditText是做什麼用的,比如讓輸入“用戶名”,或者輸入“電話號碼”等,但是你又不想在EditText前面加一個TextView來說明這是輸入“用戶名”的,因爲這會使用一個TextView,那麼怎麼辦呢?EditText爲我們提供了android:hint來設置當EditText內容爲空時顯示的文本,這個文本只在EditText爲空時顯示,你輸入字符的時候就消失了,不影響你的EditText的文本。。修改main.xml如下:
    Xml代碼 複製代碼 收藏代碼
    1. <?xml version="1.0" encoding="utf-8"?>
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3. android:orientation="vertical"
    4. android:layout_width="fill_parent"
    5. android:layout_height="fill_parent"
    6. >
    7. <EditText
    8. android:id="@+id/edit_text"
    9. android:layout_width="fill_parent"
    10. android:layout_height="wrap_content"
    11. android:maxLength="40"
    12. android:hint="請輸入用戶名..."/>
    13. </LinearLayout>
    運行應用就會看到如下的效果:

    看看吧,簡潔明瞭還不用新增一個TextView說明,也不影響用戶操作。
  3. 上面列出了空白時的提示文字,有的人說了,我不想要這個灰色的提示文字,和我的應用整體風格不協調,那也行啊,我們可以換顏色,怎麼換呢,就是通過android:textColorHint屬性設置你想要的顏色。修改main.xml如下:
    Xml代碼 複製代碼 收藏代碼
    1. <?xml version="1.0" encoding="utf-8"?>
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3. android:orientation="vertical"
    4. android:layout_width="fill_parent"
    5. android:layout_height="fill_parent"
    6. >
    7. <EditText
    8. android:id="@+id/edit_text"
    9. android:layout_width="fill_parent"
    10. android:layout_height="wrap_content"
    11. android:maxLength="40"
    12. android:hint="請輸入用戶名..."
    13. android:textColorHint="#238745"/>
    14. </LinearLayout>
    運行程序效果如下:

    看到了吧,顏色已經變了。。
  4. 還有一個比較實用的功能,就是設置EditText的不可編輯。設置android:enabled="false"可以實現不可編輯,可以獲得焦點。這時候我們看到EditText和一個TextView差不多:

  5. 實現類似html中Textarea的文本域。在Android中沒有專門的文本域組件,但是可以通過設置EditText的高來實現同樣的文本域功能。修改main.xml如下:
    Xml代碼 複製代碼 收藏代碼
    1. <?xml version="1.0" encoding="utf-8"?>
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3. android:orientation="vertical"
    4. android:layout_width="fill_parent"
    5. android:layout_height="fill_parent"
    6. >
    7. <EditText
    8. android:id="@+id/edit_text"
    9. android:layout_width="fill_parent"
    10. android:layout_height="200dip"/>
    11. </LinearLayout>
    運行程序效果如下:

四:輸入特殊格式的字符

在我們開發程序的時候不免會輸入一些特屬個數的字符,比如密碼(輸入框的字符要加密顯示),電話號碼(比如數字和-),數字等,這些都算是一些特屬格式的字符,強大的EditText同樣爲我們提供了輸入這些特屬格式字符的設置。

  1. 密碼文本框。密碼輸入也是Android應用常用的功能,通過配置EditText的android:password="true"就可以實現這一密碼輸入功能,修改main.xml如下:
    Xml代碼 複製代碼 收藏代碼
    1. <?xml version="1.0" encoding="utf-8"?>
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3. android:orientation="vertical"
    4. android:layout_width="fill_parent"
    5. android:layout_height="fill_parent"
    6. >
    7. <EditText
    8. android:id="@+id/edit_text"
    9. android:layout_width="fill_parent"
    10. android:layout_height="wrap_content"
    11. android:password="true"/>
    12. </LinearLayout>
    運行效果如下:

    可以看到我們輸入的字符已經被“.”這樣的掩碼所代替。
  2. 手機中發短信打電話是必不可少的,所以用於專門輸入電話號碼的文本框也是大有用途,有了他我們對是否是電話號碼的校驗就容易的多了(因爲字符是正確的,只要校驗格式).通過設置android:phoneNumber="true"就可以把EditText變成只接受電話號碼輸入的文本框,連軟鍵盤都已經變成撥號專用軟鍵盤了,所以不用再擔心輸入其他字符了。修改main.xml如下:
    Xml代碼 複製代碼 收藏代碼
    1. <?xml version="1.0" encoding="utf-8"?>
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3. android:orientation="vertical"
    4. android:layout_width="fill_parent"
    5. android:layout_height="fill_parent"
    6. >
    7. <EditText
    8. android:id="@+id/edit_text"
    9. android:layout_width="fill_parent"
    10. android:layout_height="wrap_content"
    11. android:phoneNumber="true"/>
    12. </LinearLayout>
    運行程序效果如下:

    注意看軟鍵盤,已經變成撥號專用的啦.
  3. 有時候我們只想輸入數字,不想輸入字母,EditText爲我們提供了android:numeric來控制輸入的數字類型,一共有三種分別爲integer(正整數)、signed(帶符號整數)和decimal(浮點數)。這裏以signed類型的爲例,修改main.xml如下:
    Xml代碼 複製代碼 收藏代碼
    1. <?xml version="1.0" encoding="utf-8"?>
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3. android:orientation="vertical"
    4. android:layout_width="fill_parent"
    5. android:layout_height="fill_parent"
    6. >
    7. <EditText
    8. android:id="@+id/edit_text"
    9. android:layout_width="fill_parent"
    10. android:layout_height="wrap_content"
    11. android:numeric="signed"/>
    12. </LinearLayout>
    運行效果如下:

    注意這裏的軟鍵盤變成“數字鍵盤”的變化.

五:爲文本指定特定的軟鍵盤類型

前面我們通過指定爲電話號碼特定格式,然後鍵盤類型變成了撥號專用的鍵盤,這個是自動變的,其實我們也可以通過android:inputType來設置文本的類型,讓輸入法選擇合適的軟鍵盤的。。android:inputType有很多類型,這裏使用date類型來演示,修改main.xml如下:

Xml代碼 複製代碼 收藏代碼
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent"
  6. >
  7. <EditText
  8. android:id="@+id/edit_text"
  9. android:layout_width="fill_parent"
  10. android:layout_height="wrap_content"
  11. android:inputType="date"/>
  12. </LinearLayout>

運行效果如下:

六:Enter鍵圖標的設置

軟鍵盤的Enter鍵默認顯示的是“完成”文本,我們知道按Enter建表示前置工作已經準備完畢了,要去什麼什麼啦。比如,在一個搜索中,我們輸入要搜索的文本,然後按Enter表示要去搜索了,但是默認的Enter鍵顯示的是“完成”文本,看着不太合適,不符合搜索的語義,如果能顯示“搜索”兩個字或者顯示一個表示搜索的圖標多好。事實證明我們的想法是合理的,Android也爲我們提供的這樣的功能。通過設置android:imeOptions來改變默認的“完成”文本。這裏舉幾個常用的常量值:

  1. actionUnspecified 未指定,對應常量EditorInfo.IME_ACTION_UNSPECIFIED.效果:
  2. actionNone 沒有動作,對應常量EditorInfo.IME_ACTION_NONE 效果:
  3. actionGo 去往,對應常量EditorInfo.IME_ACTION_GO 效果:
  4. actionSearch 搜索,對應常量EditorInfo.IME_ACTION_SEARCH 效果:
  5. actionSend 發送,對應常量EditorInfo.IME_ACTION_SEND 效果:
  6. actionNext 下一個,對應常量EditorInfo.IME_ACTION_NEXT 效果:
  7. actionDone 完成,對應常量EditorInfo.IME_ACTION_DONE 效果:

下面已搜索爲例,演示一個實例,修改main.xml如下:

Xml代碼 複製代碼 收藏代碼
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent"
  6. >
  7. <EditText
  8. android:id="@+id/edit_text"
  9. android:layout_width="fill_parent"
  10. android:layout_height="wrap_content"
  11. android:imeOptions="actionSearch"/>
  12. </LinearLayout>

修改HelloEditText如下:

Java代碼 複製代碼 收藏代碼
  1. package com.flysnow;
  2.  
  3. import android.app.Activity;
  4. import android.os.Bundle;
  5. import android.view.KeyEvent;
  6. import android.widget.EditText;
  7. import android.widget.TextView;
  8. import android.widget.Toast;
  9. import android.widget.TextView.OnEditorActionListener;
  10.  
  11. public class HelloEditText extends Activity {
  12. /** Called when the activity is first created. */
  13. @Override
  14. public void onCreate(Bundle savedInstanceState) {
  15. super.onCreate(savedInstanceState);
  16. setContentView(R.layout.main);
  17. EditText editText=(EditText)findViewById(R.id.edit_text);
  18. editText.setOnEditorActionListener(new OnEditorActionListener() {
  19. @Override
  20. public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
  21. Toast.makeText(HelloEditText.this, String.valueOf(actionId), Toast.LENGTH_SHORT).show();
  22. return false;
  23. }
  24. });
  25. }
  26. }

運行程序,點擊回車(也就是搜索圖標軟鍵盤按鈕)會顯示該actionId.我們上面的每一個設置都會對應一個常量,這裏的actionId就是那個常量值。

七:EditText的取值、全選、部分選擇、獲取選中文本

下面通過一個例子來演示EditText的取值、全選、部分選擇和獲取選中文本.main.xml修改如下:

Xml代碼 複製代碼 收藏代碼
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent"
  6. >
  7. <EditText
  8. android:id="@+id/edit_text"
  9. android:layout_width="fill_parent"
  10. android:layout_height="wrap_content"
  11. android:imeOptions="actionSearch"/>
  12. <Button
  13. android:id="@+id/btn_get_value"
  14. android:text="取值"
  15. android:layout_width="wrap_content"
  16. android:layout_height="wrap_content"/>
  17. <Button
  18. android:id="@+id/btn_all"
  19. android:text="全選"
  20. android:layout_width="wrap_content"
  21. android:layout_height="wrap_content"/>
  22. <Button
  23. android:id="@+id/btn_select"
  24. android:text="從第2個字符開始選擇"
  25. android:layout_width="wrap_content"
  26. android:layout_height="wrap_content"/>
  27. <Button
  28. android:id="@+id/btn_get_select"
  29. android:text="獲取選中文本"
  30. android:layout_width="wrap_content"
  31. android:layout_height="wrap_content"/>
  32. </LinearLayout>

HelloEditText修改如下:

Java代碼 複製代碼 收藏代碼
  1. package com.flysnow;
  2.  
  3. import android.app.Activity;
  4. import android.os.Bundle;
  5. import android.text.Editable;
  6. import android.text.Selection;
  7. import android.view.KeyEvent;
  8. import android.view.View;
  9. import android.view.View.OnClickListener;
  10. import android.widget.Button;
  11. import android.widget.EditText;
  12. import android.widget.TextView;
  13. import android.widget.Toast;
  14. import android.widget.TextView.OnEditorActionListener;
  15. /**
  16. * EditText演示
  17. * @author 飛雪無情
  18. * @since 2010-11-29
  19. */
  20. public class HelloEditText extends Activity {
  21. /** Called when the activity is first created. */
  22. @Override
  23. public void onCreate(Bundle savedInstanceState) {
  24. super.onCreate(savedInstanceState);
  25. setContentView(R.layout.main);
  26. final EditText editText=(EditText)findViewById(R.id.edit_text);
  27. //監聽回車鍵
  28. editText.setOnEditorActionListener(new OnEditorActionListener() {
  29. @Override
  30. public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
  31. Toast.makeText(HelloEditText.this, String.valueOf(actionId), Toast.LENGTH_SHORT).show();
  32. return false;
  33. }
  34. });
  35. //獲取EditText文本
  36. Button getValue=(Button)findViewById(R.id.btn_get_value);
  37. getValue.setOnClickListener(new OnClickListener() {
  38. @Override
  39. public void onClick(View v) {
  40. Toast.makeText(HelloEditText.this, editText.getText().toString(), Toast.LENGTH_SHORT).show();
  41. }
  42. });
  43. //讓EditText全選
  44. Button all=(Button)findViewById(R.id.btn_all);
  45. all.setOnClickListener(new OnClickListener() {
  46. @Override
  47. public void onClick(View v) {
  48. editText.selectAll();
  49. }
  50. });
  51. //從第2個字符開始選擇EditText文本
  52. Button select=(Button)findViewById(R.id.btn_select);
  53. select.setOnClickListener(new OnClickListener() {
  54. @Override
  55. public void onClick(View v) {
  56. Editable editable=editText.getText();
  57. Selection.setSelection(editable, 1,editable.length());
  58. }
  59. });
  60. //獲取選中的文本
  61. Button getSelect=(Button)findViewById(R.id.btn_get_select);
  62. getSelect.setOnClickListener(new OnClickListener() {
  63. @Override
  64. public void onClick(View v) {
  65. int start=editText.getSelectionStart();
  66. int end=editText.getSelectionEnd();
  67. CharSequence selectText=editText.getText().subSequence(start, end);
  68. Toast.makeText(HelloEditText.this, selectText, Toast.LENGTH_SHORT).show();
  69. }
  70. });
  71. }
  72. /**
  73. * 交換兩個索引
  74. * @param start 開始索引
  75. * @param end 結束索引
  76. */
  77. protected void switchIndex(int start, int end) {
  78. int temp=start;
  79. start=end;
  80. end=temp;
  81. }
  82. }

運行效果如下:



可以通過輸入文字和點擊下面的按鈕測試。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章