Photo by Lukenn Sabellano on Unsplash
本篇將繼續認識 UI 元件,可與使用者互動的文字輸入框 EditText,並以一個範例計算 BMI。說明 EditText 的使用方法。
[EditText]
EditText 編輯框在手機/平板的應用中很常見,舉凡密碼輸入、文字輸入都會用到這個元件,在 XML 佈局檔中添加 EditText 編輯框的基本語法格式如下:<EditText android:屬性 = "值" > </EditText>由於 EditText 類別是 TextView 的子類,所以 TextView 元件所列的屬性都可以使用在 EditText 元件上,但與 TextView 不同的是 EditText 元件多了android:inputType 屬性,用來控制輸入框的顯示類型。例如,要設定一個密碼輸入框,可以將 inputType 屬性設定為 textPassword。除了 inputType 外,其他常用的屬性如下:
| XML 屬性 | 描述 | 
|---|---|
| hint | 設定顯示的提示文字串,如沒設定輸入處設為空白。 | 
| textColorHint | 設定提示文字的顏色。 | 
| inputType | 設定文字框顯示內容的類型,可選的值有 textPassword、textEmailAddress、phone 和 date 等, 可以同時指定多個,使用「|」分隔。  | 
| autoLink | 設定文字為可按的超連結形式,其屬性值有 all、web、email、phone、map 和 all | 
| drawableXxxx | 設定在文字框內的某位置繪製圖像,該圖像可以是放在 res/mipmap 目錄下的圖片。 Xxxx可以是:Top、Bottom、Right、Left、Start、End,表示上下右左等位置。  | 
| drawablePaddling | 設定圖片與輸入內容的距離。 | 
| minLines | 設設置最小行的行數為。 | 
| maxLines | 設置 EditText 最大的行數,當輸入內容超過 maxline,文字會自動向上捲動。 | 
| paddingXxxx | 設定內容與邊框的間距。Xxxx可以是:Top、Bottom、Right、Left、Start、End,表示上下右左等位置。 | 
| singleLine | 設定文字框是否單行顯示,可設定為 true 或 false,true 表示該文字框不會換行, 文字框中的字串超過一行時,超出的部分會被省略,同時在結尾處添加「…」。  | 
[程式範例]
(1)新建一個模組 Module,進入 res/layout 目錄下點選佈局檔 activity_main.xml。將預設的內容刪除,建立 4 個 TextView,兩個顯示「體重」及「身高」,兩個要顯示 BMI 值及建議文字,以及兩個輸入框,命名為 height 及 weight 以及一個按鈕 calc,以下是整個 XML 的內容。<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="50sp"
        android:textSize="24sp"
        android:text="身高(公分):" />
    <EditText
        android:id="@+id/height"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="24sp"
        android:hint="請輸入身高" 
        android:inputType="numberDecimal" />
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20sp"
        android:textSize="24sp"
        android:text="體重(公斤):" />
    <EditText
        android:id="@+id/weight"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="24sp"
        android:hint="請輸入體重"
        android:inputType="numberDecimal" />
    <TextView
        android:id="@+id/bmi"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20sp"
        android:textSize="24sp"
        android:text="" />
    <TextView android:id="@+id/bmi_desc"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10sp"
        android:textSize="24sp"
        android:text=""  />
    <Button
        android:id="@+id/calc"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="10sp"
        android:textSize="24sp"
        android:text=" 開始計算 " />
</LinearLayout>
(2)在 MainActivity.java 的 onCreate() 方法內,先建立與佈局檔的物件,用 findValueById 連結該元件,並為按鈕其添加事件監聽器,然後重寫的 onClick() 事件, 將計算的結果及建議內容放在 bmi 及 bmi_desc 兩個文字框。程式碼如下:
package com.example.myeditview;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import java.text.DecimalFormat;
public class ev_MainActivity extends AppCompatActivity {
    Button calc;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_ev_main);
        calc = (Button) findViewById(R.id.calc);   //從佈局取得按鈕
        calc.setOnClickListener(calcBMI);  //設定按鈕監聽事件
    }
    private Button.OnClickListener calcBMI = new Button.OnClickListener() {
        public void onClick(View v) {
            DecimalFormat nbmi = new DecimalFormat("0.00");
            EditText fieldheight = (EditText)findViewById(R.id.height);  //從佈局取得物件
            EditText fieldweight = (EditText)findViewById(R.id.weight);
            TextView bmi = (TextView)findViewById(R.id.bmi);
            TextView bmi_desc = (TextView)findViewById(R.id.bmi_desc);
            double height = Double.parseDouble(fieldheight.getText().toString())/100;
            double weight = Double.parseDouble(fieldweight.getText().toString());
            double BMI = weight / (height * height);
            bmi.setText("你的 BMI 是 "+ nbmi.format(BMI));  // 計算結果放在 bmi 文字框
            if (BMI<18.5) {
                bmi_desc.setText("您的體重太輕了...");
            } else if ((BMI>18.5) && (BMI≤24)){
                bmi_desc.setText("您的體重符合標準...");
            } else if ((BMI>24) && (BMI≤30)){
                bmi_desc.setText("您的體重有一點點超標...");
            } else if ((BMI>30) && (BMI≤35)){
                bmi_desc.setText("您的體重已經超標很多了...");
            } else if (BMI>35){
                bmi_desc.setText("您的體重已達重度肥胖...");
            }
        }
    };
}
執行的結果如下,左方圖是尚未輸入時的畫面,輸入框會有提示字串,右邊是輸入後,按下計算按鈕的結果。
[參考資料]
- Developer : EditText
 - Developer : Button
 - 明日科技:Android 從入門到精通
 


張貼留言