- Android開發:從0到1 (清華開發者書庫)
- 趙志榮
- 1170字
- 2020-11-28 16:13:40
7.3 文本框
Android中的文本框控件是EditText,用來收集輸入文本信息與展示文本信息。默認情況下,文本框樣式如圖7-9中的Email address控件所示。注意,它只有下邊框。

圖7-9 EditText默認樣式
EditText的對應類是android.widget.EditText,類圖如圖7-10所示,從圖中可見android.widget.EditText繼承了android.widget.TextView。

圖7-10 EditText類圖
7.3.1 文本框相關屬性
EditText有很多屬性,以下是文本框特有屬性:
? android:maxLines。設置顯示最大行數。
? android:minLines。設置至少顯示行數。
? android:inputType。設置輸入類型,目前有32種不同類型可以輸入。例如,textPassword控制輸入的內容密碼顯示;phone控制彈出的鍵盤電話撥號鍵盤。
? android:hint。文本框中的提示文本,當文本框沒有輸入任何內容的時候,該屬性設置的內容呈現淺灰色顯示。
? android:textColorHint。設置提示文本的顯示顏色,默認值是淺灰色。
? android:singleLine。設置是否單行輸入。默認情況下文本框是可以輸入多行的,通過設置該屬性為true,使文本框只能單行輸入。
? android:background。設置文本框背景。
7.3.2 實例1:用戶登錄
圖7-11是用戶登錄實例,屏幕中有兩個文本框和一個登錄按鈕,第一個文本框是用戶名,第二個文本框是密碼輸入框架。

圖7-11 用戶登錄實例
布局文件activity_main.xml的代碼如下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <EditText android:id="@+id/username" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@android:drawable/editbox_background" ① android:hint="請輸入用戶名"/> ② <EditText android:id="@+id/pwd" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@android:drawable/editbox_background" ③ android:hint="請輸入密碼" ④ android:inputType="textPassword"/> ⑤ <Button android:id="@+id/login_button" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/button"/> </LinearLayout>
上述代碼第①行和第③行是設置android:background屬性,其中取值"@android:drawable/editbox_background"是Android框架提供的editbox_background.xml,設置該屬性之后,文本框周圍有邊框,并且當文本框獲得焦點時邊框會顯示為黃色,如圖7-11所示。
代碼第②行和第④行設置android:hint屬性,圖7-11是顯示淡灰色提示信息。代碼第⑤行android:inputType="textPassword"是設置控制輸入的內容密碼顯示。
MainActivity.java代碼如下:
public class MainActivity extends AppCompatActivity{ @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final EditText edittext =(EditText) findViewById(R.id.username); ① Button button=(Button) findViewById(R.id.login_button); button.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v){ edittext.setText("你好我是EditText! "); ② } }); } }
上述代碼第①行是通過findViewById(R.id.username)方法查找EditText對象。
在程序代碼中,可以使用setText(CharSequence)方法設置EditText值,用getText()方法來獲得EditText的值,返回值是android.text.Editable接口類型,Editable繼承CharSequence接口。
提示 android.text.Editable是Android提供的,與String沒有任何關系,可通過toString()實現Editable轉換為String。示例代碼如下:
Editable newTxt=(Editable) edittext.getText(); String newString = newTxt.toString();
7.3.3 實例2:文本框輸入控制
EditText控件還有很多輸入控制屬性,下面通過如圖7-12所示的實例介紹輸入控制的相關屬性。

圖7-12 文本框輸入控制實例
布局文件activity_main.xml代碼中“最大行數3”EditText相關代碼如下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="最大行數3" android:maxLines="3"/> ① … </LinearLayout>
上述代碼第①行android:maxLines="3"是設置顯示3行文本,如圖7-13所示,雖然輸入多行文本,但是只是顯示3行文本。

圖7-13 設置顯示3行文本
布局文件activity_main.xml代碼中輸入數字的EditText相關代碼如下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> … <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="輸入數字" ① android:inputType="number" android:singleLine="true"/> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="輸入帶小數點的浮點格式" android:inputType="numberDecimal" ② android:singleLine="true"/> … </LinearLayout>
代碼第①行android:inputType="number"是設置輸入數字,彈出數字鍵盤(見圖7-14),雖然鍵盤上有小數點和負數但不能輸入,只能輸入數字。代碼第②行android:inputType="numberDecimal"是設置輸入帶小數點的浮點,彈出android:inputType="number"一樣的數字鍵盤(見圖7-14)。

圖7-14 設置輸入數字
布局文件activity_main.xml代碼中輸入日期時間的EditText相關代碼如下:
<?xml version="1.0" encoding="utf-8"?> >LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> … >EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="輸入日期時間" android:inputType="datetime" ① android:singleLine="true"/> >EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="輸入日期" android:inputType="date" ② android:singleLine="true"/> >EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="輸入時間" android:inputType="time" ③ android:singleLine="true"/> … >/LinearLayout>
代碼第①行android:inputType="datetime"是設置輸入日期與時間,彈出日期與時間鍵盤(見圖7-15(a))。代碼第②行android:inputType="date"是設置輸入日期,彈出日期鍵盤(見圖7-15(b))。代碼第③行android:inputType="time"是設置輸入時間,彈出時間鍵盤(見圖7-15(c))。從圖7-15可見日期時間、日期和時間鍵盤差別只在于左下腳鍵不同。

圖7-15 設置輸入日期與時間
- 深度學習經典案例解析:基于MATLAB
- C#程序設計(慕課版)
- x86匯編語言:從實模式到保護模式(第2版)
- Neo4j Essentials
- PHP 編程從入門到實踐
- Hands-On Automation Testing with Java for Beginners
- Microsoft Dynamics AX 2012 R3 Financial Management
- Python機器學習:預測分析核心算法
- 一本書講透Java線程:原理與實踐
- Learning YARN
- Android應用開發深入學習實錄
- Windows Phone 8 Game Development
- 百萬在線:大型游戲服務端開發
- Python機器學習開發實戰
- Using Yocto Project with BeagleBone Black