設計一個單位轉換程式 , 在輸入要轉換的數值後 , 按下轉換的按鈕 , 即可在下方顯示轉換後的數值 , 這題有幾個重點 , 關於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")才會顯示小數點後二位 :)
回覆刪除謝謝你的糾正 我已經修改了~ ^^
刪除