設計一個單位轉換程式 , 在輸入要轉換的數值後 , 按下轉換的按鈕 , 即可在下方顯示轉換後的數值 , 這題有幾個重點 , 關於menu元件的配置 , 不像所使用的方法: [TQC+ Android] 1-5 MENU 功能選單使用 menu.add來加入 , 取而代之的是我們使用res/menu資料夾所提供的menu.xml來配置 , 關鍵的method就是使用 MenuInflater這個類別來處理 , 而題目還提到要在menu出現前先判斷EditText內有沒有內容 , 沒有內容的話就把 menu選單的重設item invisible , 在這邊就要override Activity 下的 boolean onPrepareOptionsMenu (Menu menu) , 另外題目事先宣告了幾個變數 , 但是依照題意卻用不到....以下是程式碼。
package COM.TQC.GDD02; /* 題目說明: 英呎 = 公尺 * 3.28 公尺 = 英呎 * 0.3048 */ import java.text.DecimalFormat; import java.text.NumberFormat; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public class GDD02 extends Activity { protected String PREF_M = "pref_m"; protected String PREF_FT = "pref_ft"; protected String pref_m; protected String pref_ft; EditText et; TextView tv; Button etom , mtoe; NumberFormat NFTwoDigital; final int RESET = 0; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); et = (EditText) this.findViewById(R.id.editText1); tv = (TextView) this.findViewById(R.id.result); etom = (Button) this.findViewById(R.id.etom); mtoe = (Button) this.findViewById(R.id.mtoe); etom.setOnClickListener(BOnClickListener); mtoe.setOnClickListener(BOnClickListener); NFTwoDigital = new DecimalFormat(".00"); } Button.OnClickListener BOnClickListener = new Button.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub double inputNumber = Double.parseDouble((et.getText().toString())); switch(v.getId()) { case R.id.etom: tv.setText(inputNumber+"公尺="+NFTwoDigital.format(inputNumber * 3.28)+"英呎"); break; case R.id.mtoe: tv.setText(inputNumber+"英呎="+NFTwoDigital.format(inputNumber * 0.3048)+"公尺"); break; } } }; @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu, menu); return true; } @Override public boolean onPrepareOptionsMenu (Menu menu) { if(et.getText().equals("")) menu.getItem(RESET).setVisible(false); else menu.getItem(RESET).setVisible(true); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { ResetValue(); item.setVisible(false); return true; } private void ResetValue() { et.setText(""); tv.setText(""); } }
Layout檔
再來是 res/menu/menu.xml
HELLO DecimalFormat(".##") 這裡有錯喔,要改成DecimalFormat(".00")才會顯示小數點後二位 :)
回覆刪除謝謝你的糾正 我已經修改了~ ^^
刪除