搜尋此網誌

2010年6月11日 星期五

Android開發-Handle UI Events_多個button

在Android裡面 是利用Event listener來取得使用者是否正在操作介面(例如按下按鈕、touch等)來給予適當的回應 此次程式 延續上次的bmi程式 新增加了reset按鈕 可以將所有欄位清空 並且將各功能分開寫 而之前程式是一個button對應一個listener 那麼多個button 就可能需要很多個listener? 此部份我有找到一個可行的方法可以簡化此情形 查到的資料是寫android 1.6之後 就有支援這種寫法

此次的程式會學到:
1.多個button如何對應同個listener(當然也可以對應不同listener)
2.解決可能需要很多listener的情形 讓程式能夠簡化

main.xml

<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout
android:id="@+id/widget0"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
>
<Button
android:id="@+id/reset"
android:layout_width="109px"
android:layout_height="wrap_content"
android:text="Reset"
android:layout_x="100px"
android:layout_y="362px"
//將按鈕指定對應的listener 按下此按鈕將會執行ClickHandler內的東西
android:onClick="ClickHandler"
>
</Button>
<Button
android:id="@+id/submit"
android:layout_width="108px"
android:layout_height="wrap_content"
android:text="Cal Bmi"
android:layout_x="100px"
android:layout_y="292px"
//將按鈕指定對應的listener 按下此按鈕將會執行ClickHandler內的東西
android:onClick="ClickHandler"
>
</Button>
<EditText
android:id="@+id/height"
android:layout_width="165px"
android:layout_height="wrap_content"
android:textSize="18sp"
android:layout_x="100px"
android:layout_y="22px"
>
</EditText>
<EditText
android:id="@+id/weight"
android:layout_width="167px"
android:layout_height="wrap_content"
android:textSize="18sp"
android:layout_x="100px"
android:layout_y="82px"
>
</EditText>
<TextView
android:id="@+id/result"
android:layout_width="166px"
android:layout_height="57px"
android:background="#ffff9933"
android:textColor="#ff666666"
android:layout_x="70px"
android:layout_y="152px"
>
</TextView>
<TextView
android:id="@+id/suggest"
android:layout_width="168px"
android:layout_height="50px"
android:background="#ffff9933"
android:layout_x="70px"
android:layout_y="222px"
>
</TextView>
<TextView
android:id="@+id/widget33"
android:layout_width="wrap_content"
android:layout_height="32px"
android:text="Height(cm)"
android:layout_x="20px"
android:layout_y="32px"
>
</TextView>
<TextView
android:id="@+id/widget34"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Weight(kg)"
android:layout_x="20px"
android:layout_y="102px"
>
</TextView>
</AbsoluteLayout>

Bmi.java

package com.demo.android.bmi;

import android.app.Activity;
import android.os.Bundle;
import java.text.DecimalFormat;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;



public class Bmi extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//取得view上的元件
findViews();
}
private EditText fieldheight;
private EditText fieldweight;
private TextView result;
private TextView fieldsuggest;

public void ClickHandler(View v)
{
//利用switch case 來區別不同的按鈕
switch(v.getId())
{
//若是按下submit button 就執行calculate
case R.id.submit:

calculate();
break;
//若是按下reset button 就執行reset
case R.id.reset:
reset();
break;

}
}
private void findViews()
{
fieldheight = (EditText)findViewById(R.id.height);
fieldweight = (EditText)findViewById(R.id.weight);
result = (TextView)findViewById(R.id.result);
fieldsuggest = (TextView)findViewById(R.id.suggest);
}
//清除所有欄位
private void reset()
{
fieldheight.setText("");
result.setText("");
fieldweight.setText("");
fieldsuggest.setText("");

}
private void calculate()
{
DecimalFormat nf = new DecimalFormat("0.00");
double height = Double.parseDouble(fieldheight.getText().toString())/100;
double weight = Double.parseDouble(fieldweight.getText().toString());
double BMI = weight / (height * height);
result.setText("Your BMI is "+nf.format(BMI));
if(BMI>25){
fieldsuggest.setText("太胖了 該減肥了!");
}else if(18.51 fieldsuggest.setText("人人稱羨的完美身材!");
}else{
fieldsuggest.setText("太瘦了多吃點!");
}
}
}

沒有留言:

張貼留言