Android首接触--小程序(体重指数计算器)

    根据《深入浅出Android》中的例子,简单熟悉Android的开发,对原书中的实例加以简单扩展。

    apk文件下载。

    该程序是用于计算体重指数(BMI)的,"体重指数"是用来衡量人体体重是否正常(正常还是或胖或瘦)的一种计算方法,这种方法将人的体重和身高作为主要的计算依据。

    程序主要涉及到Activity,Toast,Menu,Button,AlertDialog,TextView,EditView,RadioButton,RadioGroup等简单控件及SharedPreferences的使用的相关知识。

    程序主界面截图如下:

     

 

    主界面layout文件如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:fadeScrollbars="true"
    android:orientation="vertical"
    android:scrollbars="vertical" >

    <RadioGroup
        
android:id="@+id/rgSex"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <RadioButton
            
android:id="@+id/rbMale"
            android:layout_width="60dp"
            android:layout_height="wrap_content"
            android:checked="true"
            android:text="@string/male" />

        <RadioButton
            
android:id="@+id/rbFemale"
            android:layout_width="60dp"
            android:layout_height="wrap_content"
            android:text="@string/female" />
    </RadioGroup>

    <TextView
        
android:id="@+id/tvHeight"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/height" />

    <EditText
        
android:id="@+id/etHeight"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:inputType="numberDecimal" />

    <TextView
        
android:id="@+id/tvWeigth"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/weight" />

    <EditText
        
android:id="@+id/EtWeight"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:inputType="numberDecimal" />

    <RelativeLayout
        
android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="@dimen/marginTop" >

        <Button
            
android:id="@+id/btnCompute"
            android:layout_width="wrap_content"
            android:layout_height="@dimen/buttonHeight"
            android:text="@string/btncompute" />

        <Button
            
android:id="@+id/btnMore"
            android:layout_width="wrap_content"
            android:layout_height="@dimen/buttonHeight"
            android:layout_toRightOf="@id/btnCompute"
            android:text="@string/btnMore" />

        <Button
            
android:id="@+id/btnAboutauthor"
            android:layout_width="wrap_content"
            android:layout_height="@dimen/buttonHeight"
            android:layout_toRightOf="@id/btnMore"
            android:text="@string/btnAboutauthor" />

        <Button
            
android:id="@+id/btnExit"
            android:layout_width="wrap_content"
            android:layout_height="@dimen/buttonHeight"
            android:layout_toRightOf="@id/btnAboutauthor"
            android:text="@string/btnExit" />
    </RelativeLayout>

    <TextView
        
android:id="@+id/tvNotice"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="@dimen/marginTop"
        android:text="@string/notice"
        android:textColor="#FF0000" 
        android:textStyle="bold"/>

</LinearLayout>


    在layout中定义好的控件通过findViewById方法查找到,再设置好相应的setOnClickListener处理点击操作即可。

    点击“说明”,通过startActivity方法弹出说明界面,如下图所示:

     

    layout文件如下: 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
     android:fadeScrollbars="true"
    android:orientation="vertical"
    android:scrollbars="vertical" >

    <RelativeLayout
        
android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="0dp"
        android:background="#535252" >

        <TextView
            
android:id="@+id/tvAboutTitle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            android:layout_marginRight="40dp"
            android:text="@string/aboutTitle"
            android:textColor="#C2D560" />

        <Button
            
android:id="@+id/btnReturn"
            android:layout_width="wrap_content"
            android:layout_height="@dimen/buttonHeight"
            android:layout_alignParentRight="true"
            android:text="@string/btnReturn" 
            android:textColor="#C2D560"
            android:background="#535252"/>
    </RelativeLayout>

    <TextView
        
android:id="@+id/tvAbout"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="@dimen/marginTop"
        android:text="@string/about" />

    <TextView
        
android:id="@+id/tvFormula"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="@dimen/marginTop"
        android:text="@string/formula" />

    <TextView
        
android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="@dimen/marginTop"
        android:text="@string/standNotice"
        android:textColor="#00FFFF" />

    <TextView
        
android:id="@+id/tvLight"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="@dimen/marginTop"
        android:text="@string/light" />

    <TextView
        
android:id="@+id/tvExample"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="@dimen/marginTop"
        android:text="@string/example" />

</LinearLayout>

      

    点击“关于”时,用AlertDialog弹出关于信息,当然也可以用Toast提示信息,代码如下:

     private void AboutAuthor() {
        new AlertDialog.Builder(BMIActivity.this)
                .setCancelable(true)
                .setTitle(R.string.contactTitle)
                .setMessage(R.string.contact)
                .setPositiveButton(R.string.btnSure,
                        new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface arg0, int arg1) {
                                // TODO Auto-generated method stub
                                arg0.cancel();
                            }
                        }).show();

        // Toast.makeText(this, R.string.contact, Toast.LENGTH_SHORT).show();
    }

    

    点击“退出”时,用AlertDialog弹出确认操作信息,代码如下:

      private void CloseMethod() {
        new AlertDialog.Builder(BMIActivity.this)
                .setTitle(R.string.exitNotice)
                .setCancelable(false)
                .setMessage(R.string.exitAsk)
                .setNegativeButton(R.string.btnReturn,
                        new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface arg0, int arg1) {
                                // TODO Auto-generated method stub
                                arg0.cancel();
                            }
                        })
                .setPositiveButton(R.string.btnSure,
                        new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface arg0, int arg1) {
                                // TODO Auto-generated method stub
                                finish();
                            }
                        }).show();
    }

  

    通过重载onCreateOptionsMenu方法添加菜单,代码如下:

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // TODO Auto-generated method stub
        super.onCreateOptionsMenu(menu);
        menu.add(0, menuAbout, 0, "关于……");
        menu.add(0, menuExit, 0, "退出……");

        return true;
    }

    

    通过重载onOptionsItemSelected响应菜单操作,代码如下:

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // TODO Auto-generated method stub
        super.onOptionsItemSelected(item);
        switch (item.getItemId()) {
        case menuAbout:
            AboutAuthor();
            break;

        case menuExit:
            CloseMethod();
            break;

        default:
            break;
        }
        return true;
    }

  

    因为自己的身高一般不常改变,要想在程序关闭后再次打开时,不需要再重复输入身高信息,那么就需要将身高信息保存起来。Android中可以用SharedPreferences来方便保存数据。SharedPreferences是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息。其存储位置在/data/data/<包名>/shared_prefs目录下。SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过Editor对象实现。实现SharedPreferences存储的步骤如下:

  一、根据Context获取SharedPreferences对象

  二、利用edit()方法获取Editor对象。

  三、通过Editor对象存储key-value键值对数据。

  四、通过commit()方法提交数据。

    本程序中通过重载onStop方法在程序退出时来保存身高数据,代码如下:

        @Override

        protected void onStop() {
        // TODO Auto-generated method stub
        super.onStop();
        SharedPreferences pre = getSharedPreferences(PREF, 0);
        pre.edit().putString(PREF_HEIGHT, tvHeight.getText().toString())
                .commit();
    }

 

   可以看到/data/data/<waterfrost.com.bmi>/shared_prefs目录下生成一个名为:BMIPREF.xml的文件,如下图所示:

       

      BMIPREF.xml文件内容为:

 <?xml version='1.0' encoding='utf-8' standalone='yes' ?>

<map>
<string name="BMIHEIGHT">170</string>
</map>

  

  程序再次打开时,读取身高数据并通过EditText的setText方法将身高设置到输入框中,代码如下:

        private void ReadPreference() {
        SharedPreferences pre = getSharedPreferences(PREF, 0);
        String height = pre.getString(PREF_HEIGHT, "");
        if (!"".equals(height)) {
            tvHeight.setText(height);
            tvWeight.requestFocus();
        }
    }
 

   另外,程序的图标可以在AndroidManifest.xml中application节点的android:icon属性进行设置,如下所示:

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"    

    package="waterfrost.com.bmi"    

    android:versionCode="1"    

    android:versionName="1.0">

    <uses-sdk android:minSdkVersion="10" />

    <application
        
android:icon="@drawable/bmi"
        android:label="@string/app_name" >
        <activity
            
android:name=".BMIActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".AboutActivity" android:label="@string/aboutTitle" />
    </application>

</manifest>

    其中“@drawable/bmi”为程序自定义的图标文件。

    下一篇:Android手机上简单的自动重复拨号小软件

    这个东东在春节电话订票时能够很好派上用场。


posted @ 2012-05-21 21:10  waterfrost  阅读(13890)  评论(0编辑  收藏  举报