zoukankan      html  css  js  c++  java
  • Android攻略--单位转化器UC--Units Converter(学习笔记)

    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>
  • 相关阅读:
    问题集
    第04次作业-树
    06-图
    05-查找
    04-树
    03-栈和队列
    02-线性表
    01-抽象数据类型
    C语言--总结报告
    C语言--函数嵌套
  • 原文地址:https://www.cnblogs.com/yzmb/p/4002760.html
Copyright © 2011-2022 走看看