1创建工程
注意这个名称的命名:
3. UC结构及相关代码
UC.java 用于执行单位换算的Activity
// UC.java package com.apress.uc; import android.app.Activity; import android.os.Bundle; import android.text.Editable; import android.text.TextWatcher; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.Spinner; public class UC extends Activity { private int position = 0; private double[] multipliers = { 0.0015625, // Acres to square miles 101325.0, // Atmospheres to Pascals 100000.0, // Bars to Pascals 0, // Degrees Celsius to Degrees Fahrenheit (placeholder) 0, // Degrees Fahrenheit to Degrees Celsius (placeholder) 0.00001, // Dynes to Newtons 0.3048, // Feet/Second to Metres/Second 0.0284130625, // Fluid Ounces (UK) to Litres 0.0295735295625, // Fluid Ounces (US) to Litres 746.0, // Horsepower (electric) to Watts 735.499, // Horsepower (metric) to Watts 1/1016.0469088, // Kilograms to Tons (UK or long) 1/907.18474, // Kilograms to Tons (US or short) 1/0.0284130625, // Litres to Fluid Ounces (UK) 1/0.0295735295625, // Litres to Fluid Ounces (US) 331.5, // Mach Number to Metres/Second 1/0.3048, // Metres/Second to Feet/Second 1/331.5, // Metres/Second to Mach Number 0.833, // Miles/Gallon (UK) to Miles/Gallon (US) 1/0.833, // Miles/Gallon (US) to Miles/Gallon (UK) 100000.0, // Newtons to Dynes 1/101325.0, // Pascals to Atmospheres 0.00001, // Pascals to Bars 640.0, // Square Miles to Acres 1016.0469088, // Tons (UK or long) to Kilograms 907.18474, // Tons (US or short) to Kilograms 1/746.0, // Watts to Horsepower (electic) 1/735.499 // Watts to Horsepower (metric) }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final EditText etUnits = (EditText) findViewById(R.id.units); final Spinner spnConversions = (Spinner) findViewById(R.id.conversions); ArrayAdapter<CharSequence> aa; aa = ArrayAdapter. createFromResource(this, R.array.conversions, android.R.layout.simple_spinner_item); aa.setDropDownViewResource(android.R.layout.simple_spinner_item); spnConversions.setAdapter(aa); AdapterView.OnItemSelectedListener oisl; oisl = new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { UC.this.position = position; } @Override public void onNothingSelected(AdapterView<?> parent) { System.out.println("nothing"); } }; spnConversions.setOnItemSelectedListener(oisl); final Button btnClear = (Button) findViewById(R.id.clear); AdapterView.OnClickListener ocl; ocl = new AdapterView.OnClickListener() { @Override public void onClick(View v) { etUnits.setText(""); } }; btnClear.setOnClickListener(ocl); btnClear.setEnabled(false); final Button btnConvert = (Button) findViewById(R.id.convert); ocl = new AdapterView.OnClickListener() { @Override public void onClick(View v) { String text = etUnits.getText().toString(); double input = Double.parseDouble(text); double result = 0; if (position == 3) result = input*9.0/5.0+32; // Celsius to Fahrenheit else if (position == 4) result = (input-32)*5.0/9.0; // Fahrenheit to Celsius else result = input*multipliers[position]; etUnits.setText(""+result); } }; btnConvert.setOnClickListener(ocl); btnConvert.setEnabled(false); Button btnClose = (Button) findViewById(R.id.close); ocl = new AdapterView.OnClickListener() { @Override public void onClick(View v) { finish(); } }; btnClose.setOnClickListener(ocl); TextWatcher tw; tw = new TextWatcher() { @Override public void afterTextChanged(Editable s) { } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { if (etUnits.getText().length() == 0) { btnClear.setEnabled(false); btnConvert.setEnabled(false); } else { btnClear.setEnabled(true); btnConvert.setEnabled(true); } } }; etUnits.addTextChangedListener(tw); } }
main.xml 用于保存小部件和布局信息的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" android:gravity="center_vertical" android:background="@drawable/gradientbg" android:padding="5dip"> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="10dip" android:text="@string/units" android:textColor="#000000" android:textSize="15sp" android:textStyle="bold"/> <EditText android:id="@+id/units" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="type a number" android:inputType="numberDecimal|numberSigned" android:maxLines="1"/> </LinearLayout> <Spinner android:id="@+id/conversions" android:layout_width="fill_parent" android:layout_height="wrap_content" android:prompt="@string/prompt"/> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content"> <Button android:id="@+id/clear" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="@string/clear"/> <Button android:id="@+id/convert" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="@string/convert"/> <Button android:id="@+id/close" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="@string/close"/> </LinearLayout> </LinearLayout>
strings.xml 保存了应用中的字符串
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">Units Converter</string> <string name="clear">Clear</string> <string name="close">Close</string> <string name="convert">Convert</string> <string name="prompt">Select a conversion</string> <string name="units">Units</string> </resources>
arrays.xml 文件中保存了换算类型的字符串数组
<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="conversions"> <item>Acres to Square Miles</item> <item>Atmospheres to Pascals</item> <item>Bars to Pascals</item> <item>Degrees Celsius to Degrees Fahrenheit</item> <item>Degrees Fahrenheit to Degrees Celsius</item> <item>Dynes to Newtons</item> <item>Feet/Second to Metres/Second</item> <item>Fluid Ounces (UK) to Litres</item> <item>Fluid Ounces (US) to Litres</item> <item>Horsepower (electric) to Watts</item> <item>Horsepower (metric) to Watts</item> <item>Kilograms to Tons (UK or long)</item> <item>Kilograms to Tons (US or short)</item> <item>Litres to Fluid ounces (UK)</item> <item>Litres to Fluid ounces (US)</item> <item>Mach Number to Metres/Second</item> <item>Metres/Second to Feet/Second</item> <item>Metres/Second to Mach Number</item> <item>Miles/Gallon (UK) to Miles/Gallon (US)</item> <item>Miles/Gallon (US) to Miles/Gallon (UK)</item> <item>Newtons to Dynes</item> <item>Pascals to Atmospheres</item> <item>Pascals to Bars</item> <item>Square Miles to Acres</item> <item>Tons (UK or long) to Kilograms</item> <item>Tons (US or short) to Kilograms</item> <item>Watts to Horsepower (electric)</item> <item>Watts to Horsepower (metric)</item> </string-array> </resources>
gradientbg.xml 文件保存了用于Activity背景色的渐变形状
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <gradient android:startColor="#fccb06" android:endColor="#fd6006" android:angle="270"/> <corners android:radius="10dp"/> </shape>
4 虚拟机运行结果
注意:
其中的uc.xml 换成以下代码可以运行
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" tools:context="com.apress.uc.UC" > </menu>