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手机上简单的自动重复拨号小软件

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


转载于:https://www.cnblogs.com/waterfrost/archive/2012/05/21/2512176.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值