2013年8月28日 星期三

[TQC+ Android]計算BMI值_104

Android 2.1 API 7 版本原始題目載點:http://db.tt/nVrompty

僑光科技大學 蔡存孝老師 解說參考:http://rs2.ocu.edu.tw/~tsay/files/TQC104.pdf

首先進入AndroidMinifest.xml目錄add兩個Activity GDD01和GDD01_child (user permission)

定義兩個僅可單選的 RadioButton (必須選擇 Radio Group 右鍵Orientation > Horizontal 砍掉多的RadioButton )
兩個 EditText、一個 Button 、其餘TextView
如畫面所示



xml
<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:android1="http://schemas.android.com/apk/res/android"
    android:id="@+id/widget0"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_x="2dp"
        android:layout_y="51dp"
        android:text="@string/text3" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_x="-2dp"
        android:layout_y="96dp"
        android:text="@string/text1" />

    <TextView
        android:id="@+id/textView4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_x="3dp"
        android:layout_y="150dp"
        android:text="@string/text2" />

    <RadioGroup
        android1:id="@+id/radioGroup1"
        android1:layout_width="wrap_content"
        android1:layout_height="wrap_content"
        android1:layout_x="84dp"
        android1:layout_y="38dp"
        android1:orientation="horizontal" >

        <RadioButton
            android1:id="@+id/rb1"
            android1:layout_width="wrap_content"
            android1:layout_height="wrap_content"
            android1:checked="true"
            android1:text="男性" />

        <RadioButton
            android1:id="@+id/rb2"
            android1:layout_width="wrap_content"
            android1:layout_height="wrap_content"
            android1:text="女性" />
    </RadioGroup>

    <EditText
        android1:id="@+id/height"
        android1:layout_width="wrap_content"
        android1:layout_height="wrap_content"
        android1:layout_x="83dp"
        android1:layout_y="90dp"
        android1:ems="10"
        android1:inputType="numberDecimal" >

        <requestFocus />
    </EditText>

    <EditText
        android1:id="@+id/weight"
        android1:layout_width="wrap_content"
        android1:layout_height="wrap_content"
        android1:layout_x="80dp"
        android1:layout_y="144dp"
        android1:ems="10"
        android1:inputType="numberDecimal" />

    <Button
        android1:id="@+id/btn"
        android1:layout_width="wrap_content"
        android1:layout_height="wrap_content"
        android1:layout_x="125dp"
        android1:layout_y="200dp"
        android1:text="計算" />

    <TextView
        android1:id="@+id/textView1"
        android1:layout_width="wrap_content"
        android1:layout_height="wrap_content"
        android1:layout_x="8dp"
        android1:layout_y="3dp"
        android1:text="@string/title" />

</AbsoluteLayout>
GDD01.java - Activity主體
package COM.TQC.GDD01;


import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;

public class GDD01 extends Activity 
{
  private EditText etheight;
  private EditText etweight;
  private RadioButton rb1;
  private RadioButton rb2;
    
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) 
  {
    super.onCreate(savedInstanceState);
    
    setContentView(R.layout.main);
    
    Button b1 = (Button) findViewById(R.id.button1);
    b1.setOnClickListener(new Button.OnClickListener()
    {
      public void onClick(View v)
      {
       
      
        //從輸入介面中取出了的身高、體重值,要將身高、體重值傳送給 child_Activity 後作計算
       etheight=(EditText)findViewById(R.id.height);
       etweight=(EditText)findViewById(R.id.weight);
       rb1=(RadioButton)findViewById(R.id.rb1);
       rb2=(RadioButton)findViewById(R.id.rb2);
       String sex;
       if(rb1.isChecked()) sex="M";
       else sex="W";       
       
        //這些附加在 Intent 上的訊息都儲存在 Bundle 物件中
        Intent intent = new Intent(GDD01.this, GDD01_child.class);
        Bundle bundle = new Bundle();
        bundle.putString("Sex", sex);
        bundle.putDouble("height", 
          Double.parseDouble(etheight.getText().toString()));
        bundle.putDouble("weight", 
          Double.parseDouble(etweight.getText().toString()));
     
     //透過「intent.putExtras(bundle)」敘述,將「bundle」 物件附加在 Intent 上,隨著 Intent 送出而送出
        intent.putExtras(bundle);
        startActivityForResult(intent, 0);
           
       
      }
    });
  }
  
  
  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data)
  {
    switch (resultCode)
    { 
      case RESULT_OK:
    
        Bundle bundle = data.getExtras();
        String Sex = bundle.getString("Sex");
        double height = bundle.getDouble("height");
        double weight = bundle.getDouble("weight");
        
        etheight.setText("" + height);
        etweight.setText("" + weight);
        if(Sex.equals("M"))
        {
          rb1.setChecked(true);
        }else
        {
          rb2.setChecked(true);
        }
        break;       
      default: 
        break; 
     } 
   } 
}

GDD01_child.java - Activity主體
package COM.TQC.GDD01 ;

import java.text.DecimalFormat;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class GDD01_child extends Activity 
{
  Bundle bundle;
  Intent intent;
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) 
  {
    super.onCreate(savedInstanceState);
    
    
    setContentView(R.layout.mylayout);
    
    
    intent=this.getIntent();
    bundle = intent.getExtras();
    
   
    String Sex = bundle.getString("Sex");
    double height = bundle.getDouble("height");
    double weight = bundle.getDouble("weight");
      
    
    String BMI_result = this.getBMI(height,weight);
    String BMI_advice = this.getAdvice(Sex,height,weight);
    
    TextView tvBMI=(TextView) findViewById(R.id.tvBMI);
    tvBMI.setText(BMI_result);
    TextView tvAdvice=(TextView) findViewById(R.id.tvAdvice);
    tvAdvice.setText(BMI_advice);
    
  
    Button b1 = (Button) findViewById(R.id.btn);
    b1.setOnClickListener(new Button.OnClickListener()
    {
      public void onClick(View v)
      {          
      
       GDD01_child.this.setResult(RESULT_OK, intent);
       
      
       GDD01_child.this.finish();
      }
    });
  }
  
 //BMI值格式化
  private String format(double num)
  {
      
   return String.format("%.2f", num);
   
  }
  //取得BMI值
  private String getBMI (double height, double weight)
  {
   
    return this.getString(R.string.report_result)+
        " "+format(weight/(height*height));
  }
  //依BMI值取得建議
  private String getAdvice (String Sex, double height, double weight)
  {
  
     double bmi = weight / (height * height);
     
     double max_bmi, min_bmi;
     if(Sex=="M"){
      max_bmi=25;
      min_bmi=22;
     }else{
      max_bmi=22;
      min_bmi=18;
     }
     if(bmi>max_bmi)
      return this.getString(R.string.advice_heavy);
     else if(bmi<min_bmi)
      return this.getString(R.string.advice_light);
     else
      return this.getString(R.string.advice_average);

  }

}

沒有留言:

張貼留言