這兩天終於下定決心把書看起來了,在搭好開發環境後接觸了第一個除了Hello World的Android初學小例,對基於Eclipse的Android編程有了一個架構性的粗淺認識。
使用的書是人民郵電出版社《Google Android開發入門指南(第二版)》,在此感謝BUPT圖書館。
菜鳥踏出了第一步!
開發手記:
版本v1.8.6.3.40
功能更新:
1.增加MENU菜單
2.修改關於對話方塊和一鍵登入微博功能移至菜單
3.增加菜單中退出程式功能
4.修改計算結果和建議移至下一面板
5.超重時狀態列提示功能
版本v1.8.5.10.52
功能更新:
1.增加輸入框為空白時使用者提示
2.增加按鈕呼出關於對話方塊功能
3.增加一鍵登入微博功能
版本v1.8.4.21.11
測試平台:Android1.5 HVGA
功能特性:
1.計算常人體質指數並給出建議
JAVA原始碼
版本v1.8.6.3.40
//Bmi.java
package com.demo.android.bmi;import java.net.URISyntaxException;import java.text.DecimalFormat;import android.app.Activity;import android.app.AlertDialog;import android.content.DialogInterface;import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;import android.widget.Toast;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);// 顯示在螢幕上// Listen for button clicks// findViewById方法取得按鈕組件,為保持與XML檔案描述類型一致作強制轉換Button button = (Button) findViewById(R.id.submit);button.setOnClickListener(calcBMI);}private OnClickListener calcBMI = new OnClickListener() {public void onClick(View v) {/* * DecimalFormat nf = new DecimalFormat("0.00");// 定義雙精確度浮點數 * try { * EditText fieldheight = (EditText) findViewById(R.id.height);// 取數 * EditText fieldweight = (EditText) findViewById(R.id.weight);// 取數 * double height = Double.parseDouble(fieldheight.getText() * .toString()) / 100; double weight = * Double.parseDouble(fieldweight.getText() .toString()); double BMI * = weight / (height * height); * * TextView result = (TextView) findViewById(R.id.result); * result.setText("您的體質指數BMI值為:" + nf.format(BMI)); // * 這裡我一開始用"@string/bmi_result",後來用R.string.bmi_result,結果都不行,估計和+號有關係 * * TextView fieldsuggest = (TextView) findViewById(R.id.suggest);// * 取得控制項 if (BMI > 25) { fieldsuggest.setText(R.string.advice_heavy); * } else if (BMI < 20) { * fieldsuggest.setText(R.string.advice_light); } else { * fieldsuggest.setText(R.string.advice_average); } } catch * (Exception obj) { Toast.makeText(Bmi.this, "真傲嬌,兩個空都要填滿的!", * Toast.LENGTH_LONG) .show(); // 自動隱去型麵包板,作用於提示很友好 } } */// 以上第一版第二版點擊按鈕計算BMI值// 以下第三版點擊按鈕跳轉到報告頁面EditText field_height = (EditText) findViewById(R.id.height);// 取數EditText field_weight = (EditText) findViewById(R.id.weight);// 取數if("".equals(field_height.getText().toString())||"".equals(field_weight.getText().toString())){Toast.makeText(Bmi.this, "別傲嬌,兩個空都要填滿的!",Toast.LENGTH_LONG) .show();}else{Intent intent = new Intent();intent.setClass(Bmi.this, Report.class);Bundle bundle = new Bundle();bundle.putString("KEY_HEIGHT", field_height.getText().toString());bundle.putString("KEY_WEIGHT", field_weight.getText().toString());intent.putExtras(bundle);startActivity(intent);}}};protected static final int MENU_ABOUT = Menu.FIRST;protected static final int MENU_Quit = Menu.FIRST + 1;@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// 建立菜單// TODO Auto-generated method stubsuper.onCreateOptionsMenu(menu);menu.add(0, MENU_ABOUT, 0, "關於...").setIcon(android.R.drawable.ic_menu_info_details);menu.add(0, MENU_Quit, 0, "退出").setIcon(android.R.drawable.ic_menu_close_clear_cancel);return super.onCreateOptionsMenu(menu);}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// 處理菜單選項動作// TODO Auto-generated method stubswitch (item.getItemId()) {case MENU_ABOUT:OpenOptionsDialog();break;case MENU_Quit:finish();break;}return super.onOptionsItemSelected(item);}private void OpenOptionsDialog() {new AlertDialog.Builder(Bmi.this).setTitle(R.string.about_title)// 設定標題.setMessage(R.string.about_msg)// 設定內容.setPositiveButton(R.string.ok_label,new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialoginterface, int i) {// 函數體空,點擊即關閉}})// 添加確認按鈕.setNegativeButton(R.string.homepage_label,new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialoginterface, int i) {Uri uri = Uri.parse(getString(R.string.homepage_uri));// 注意:這裡網址一定要有http://,否則坑爹的FOCUS又來Intent intent = new Intent(Intent.ACTION_VIEW,uri);startActivity(intent);}})// 添加去往首頁按鈕.show();// 顯示}}
//Report.java
package com.demo.android.bmi;import java.text.DecimalFormat;import android.app.Activity;import android.app.Notification;import android.app.NotificationManager;import android.app.PendingIntent;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.TextView;public class Report extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.report);findViews();showResults();setListensers();}private Button button_back;private TextView view_result;private TextView view_suggest;private void findViews() {button_back = (Button) findViewById(R.id.report_back);view_result = (TextView) findViewById(R.id.result_r);view_suggest = (TextView) findViewById(R.id.suggest_r);}// Listen for button clicksprivate void setListensers() {button_back.setOnClickListener(backMain);}private Button.OnClickListener backMain = new Button.OnClickListener() {public void onClick(View v) {// Close this ActivityReport.this.finish();}};private void showResults() {DecimalFormat nf = new DecimalFormat("0.00");Bundle bunde = this.getIntent().getExtras();// Activity.getIntent()可以得到傳來的Intent對象實體// getExtras()取得附加在Intent上的bunde對象double height = Double.parseDouble(bunde.getString("KEY_HEIGHT")) / 100;double weight = Double.parseDouble(bunde.getString("KEY_WEIGHT"));double BMI = weight / (height * height);view_result.setText(getString(R.string.bmi_result) + nf.format(BMI));// Give health adviceif (BMI > 25) {showNotification(BMI);view_suggest.setText(R.string.advice_heavy);} else if (BMI < 20) {view_suggest.setText(R.string.advice_light);} else {view_suggest.setText(R.string.advice_average);}}protected void showNotification(double BMI) {// TODO Auto-generated method stubNotificationManager barManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);//取得系統內建提供的功能Notification barMsg = new Notification(android.R.drawable.stat_sys_warning, "歡迎來到微胖界!",System.currentTimeMillis());//立刻顯示PendingIntent contentIntent = PendingIntent.getActivity(this, 0,//使用者點選狀態列中該筆資訊時執行一個Activitynew Intent(this, Bmi.class), PendingIntent.FLAG_UPDATE_CURRENT);//第三個參數最重要,定義要調用的IntentbarMsg.setLatestEventInfo(Report.this, "您的BMI值過高", "通知鐵道部",//出現在狀態列下拉詳細通知裡contentIntent);barManager.notify(0, barMsg);//傳送資訊內容給架構並顯示在狀態列}}
版本v1.8.5.10.52
package com.demo.android.bmi;import java.net.URISyntaxException;import java.text.DecimalFormat;import android.app.Activity;import android.app.AlertDialog;import android.content.DialogInterface;import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;import android.widget.Toast;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);// 顯示在螢幕上// Listen for button clicks// findViewById方法取得按鈕組件,為保持與XML檔案描述類型一致作強制轉換Button button = (Button) findViewById(R.id.submit);button.setOnClickListener(calcBMI);}private OnClickListener calcBMI = new OnClickListener() {public void onClick(View v) {DecimalFormat nf = new DecimalFormat("0.00");// 定義雙精確度浮點數try {EditText fieldheight = (EditText) findViewById(R.id.height);// 取數EditText fieldweight = (EditText) findViewById(R.id.weight);// 取數double height = Double.parseDouble(fieldheight.getText().toString()) / 100;double weight = Double.parseDouble(fieldweight.getText().toString());double BMI = weight / (height * height);TextView result = (TextView) findViewById(R.id.result);result.setText("您的體質指數BMI值為:" + nf.format(BMI));// 這裡我一開始用"@string/bmi_result",後來用R.string.bmi_result,結果都不行,估計和+號有關係TextView fieldsuggest = (TextView) findViewById(R.id.suggest);// 取得控制項if (BMI > 25) {fieldsuggest.setText(R.string.advice_heavy);} else if (BMI < 20) {fieldsuggest.setText(R.string.advice_light);} else {fieldsuggest.setText(R.string.advice_average);}OpenOptionsDialog();// 用於每次計算完BMI顯示建議後順便調用關於對話方塊} catch (Exception obj) {Toast.makeText(Bmi.this, "真傲嬌,兩個空都要填滿的!", Toast.LENGTH_LONG).show();// 自動隱去型麵包板,作用於提示很友好}}private void OpenOptionsDialog() {new AlertDialog.Builder(Bmi.this).setTitle(R.string.about_title)// 設定標題.setMessage(R.string.about_msg)// 設定內容.setPositiveButton(R.string.ok_label,new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialoginterface, int i) {// 函數體空,點擊即關閉}})// 添加確認按鈕.setNegativeButton(R.string.homepage_label,new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialoginterface, int i) {Uri uri = Uri.parse(getString(R.string.homepage_uri));// 注意:這裡網址一定要有http://,否則坑爹的FOCUS又來Intent intent = new Intent(Intent.ACTION_VIEW, uri);startActivity(intent);}})// 添加去往首頁按鈕.show();// 顯示}};}
v1.8.4.21.11
package com.demo.android.bmi;import java.text.DecimalFormat;//功能:將數字格式化成特定的字串格式import android.app.Activity;//Android程式必包含這倆import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;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);//顯示在螢幕上 //Listen for button clicks //findViewById方法取得按鈕組件,為保持與XML檔案描述類型一致作強制轉換 Button button = (Button)findViewById(R.id.submit);button.setOnClickListener(calcBMI); } private OnClickListener calcBMI = new OnClickListener(){ public void onClick(View v){ DecimalFormat nf = new DecimalFormat("0.00");//定義雙精確度浮點數 EditText fieldheight = (EditText)findViewById(R.id.height);//取數 EditText fieldweight = (EditText)findViewById(R.id.weight);//取數 double height = Double.parseDouble(fieldheight.getText().toString())/100; double weight = Double.parseDouble(fieldweight.getText().toString()); double BMI = weight/(height*height); TextView result = (TextView)findViewById(R.id.result); result.setText("您的體質指數BMI值為:"+nf.format(BMI));//這裡我一開始用"@string/bmi_result",後來用R.string.bmi_result,結果都不行 TextView fieldsuggest = (TextView)findViewById(R.id.suggest);//取得控制項 if(BMI>25){ fieldsuggest.setText(R.string.advice_heavy); }else if(BMI<20){ fieldsuggest.setText(R.string.advice_light); }else{ fieldsuggest.setText(R.string.advice_average); } } };}
main.xml原始碼
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" ><TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/height" /><EditText android:id="@+id/height" android:layout_width="fill_parent" android:layout_height="wrap_content" android:inputType="numberDecimal" android:text="" /><TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/weight" /><EditText android:id="@+id/weight" android:layout_width="fill_parent" android:layout_height="wrap_content" android:inputType="numberDecimal" android:text="" /><Button android:id="@+id/submit" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/bmi_btn" /><TextView android:id="@+id/result" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/bmi_result" /><TextViewandroid:id="@+id/suggest" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="" /></LinearLayout>