BMI计算器
这个运用到了Activity之间的跳转,每个app通常由多个界面组成,每个界面就是一个activity,界面跳转就是activity之间的跳转。
activity之间的跳转用 Intent(意图) 组件
Intent是意图组件,是程序各组件进行交互的一种重要方式,它不仅可以指定当前组件要执行的动作,还可以在不同组件之间进行数据传输。
Intent被分为显式意图和隐式意图
显式意图
显式意图可以直接通过名称开启指定的目标组件,通过其构造方法
Intent(ContextpackageContext,Class<?>cls)来实现,其中第一个参数为当前activity对象,使用this即可,第二个参数表示启动的目标activity。
通过这个方法创建一个activity对象,然后将该对象传递给activity的startActivity(Intent,intent)方法即可启动目标组件。
示例代码如下:
Intent intent = new Intent(this,Activity2.class); //创建Intent对象
startActivity(intent); //开启Activity2
隐式意图
隐式意图相对显示意图来说更为抽象,它并没有明确指示要开启哪个目标组件,而是通过指定的action和category等属性信息,系统根据这些信息进行分析,然后寻找目标Activity。
示例代码如下
Intent intnet = new Intent();
//设置activity动作,该动作要和清单文件中的设置一样
intent.setAction("cn.itcast.START_ACTIVITY");
startActivity(intent);
上述代码中,没指定category,这是因为在目标Activity的清单文件中配置的category是一个默认值,在调用startActivity()方法时,自动将这个category添加到Intent中。
需要在目标清单文件中配置,指定当前Activity能够响应的action和category
示例代码如下
activity android:name="cn,itcast.Activity2"
<intent-filter>
<!--设置action属性,需要在代码中根据所设置的name打开指定组件-->
<action android:name="cn.itcast.START_ACTIVITY"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
注意:每个Intent只能指定一个action,但能指定多个category
接下来就是用intent做的BMI计算器
activity_main.xml
<?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:weightSum="5"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="24sp"
android:textColor="#03A9F4"
android:text=" 身高(米):" />
<EditText
android:id="@+id/height"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入身高:" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="24sp"
android:textColor="#03A9F4"
android:text=" 体重(公斤):" />
<EditText
android:id="@+id/weight"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入体重:" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:textSize="24sp"
android:textColor="#03A9F4"
android:layout_margin="30dp"
android:text="计算体质指数" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:textSize="24sp"
android:textColor="#03A9F4"
android:text=" 清 除 " />
</LinearLayout>
界面1结果展示
MainActivity.java
package com.example.bmi; //项目包名,一般不用赋值,建项目自动生成的
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import java.text.DecimalFormat;
public class MainActivity extends AppCompatActivity {
Button button1, button2;
EditText heightText, weightText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button1 = findViewById(R.id.button1);
button2 = findViewById(R.id.button2);
heightText = findViewById(R.id.height);
weightText = findViewById(R.id.weight);
//j计算按钮事件
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
clickbutton();
}
});
//清除按钮事件
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
weightText.setText("");
heightText.setText("");
}
});
}
//计算按钮事件
public void clickbutton() {
String h=heightText.getText().toString();
String w=weightText.getText().toString();
//判断输入内容是否为空
if(h==null||w==null){
Toast.makeText(MainActivity.this,"提醒:输入为空", Toast.LENGTH_SHORT).show();
return;
}
//初始化身高体重
double dh=1,dw=1,BMI;
try {
//把tv字符串转化为double并赋值
dh=Double.parseDouble(h);
dw=Double.parseDouble(w);
} catch (Exception e) {
Toast.makeText(MainActivity.this,"提醒:输入非法",Toast.LENGTH_SHORT).show();
return;
}
BMI = dw / (dh * dh);
//保留两位小数
DecimalFormat nf = new DecimalFormat("0.00");
String BMIText1=nf.format(BMI);
//传递参数到第二个页面
Intent intent=new Intent(MainActivity.this,Main2Activity.class);
//intent.setClass(this,Main2Activity.class);
intent.putExtra("BMI", BMIText1);
startActivity(intent);
}
}
activity_main2.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:weightSum="5"
tools:context="com.example.bmi.Main2Activity" >
<ImageView
android:id="@+id/tp"
android:layout_weight="2"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:src="@drawable/tu1"
/>
<TextView
android:id="@+id/bmi"
android:layout_weight="1"
android:gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="24sp"
android:textColor="#E25A8B"
android:layout_margin="10dp"
android:text="BMI:" />
<TextView
android:id="@+id/Text2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="24sp"
android:textColor="#03A9F4" />
<TextView
android:id="@+id/jy"
android:layout_weight="1"
android:gravity="center_horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="24sp"
android:textColor="#EE66A2"
android:layout_margin="5dp"
android:text="身体状态:" />
<TextView
android:id="@+id/Text4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="24sp"
android:textColor="#03A9F4" />
</LinearLayout>
解释部分代码:
android:src="@drawable/tu1" //在图像视图组件添加图片
界面2结果展示
Main2Activity.java
package com.example.bmi; //项目包名
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.TextView;
public class Main2Activity extends AppCompatActivity {
String zt,sjy;
String sbmi;
double dbmi=1;
TextView BMIText, classificationText,bmi,jy;
ImageView tp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
bmi=(TextView) findViewById(R.id.bmi);
jy=(TextView) findViewById(R.id.jy);
tp=(ImageView) findViewById(R.id.tp);
BMIText = findViewById(R.id.Text2);
classificationText = findViewById(R.id.Text4);
//创建显示意图
Intent intent=getIntent();
sbmi=intent.getStringExtra("BMI");
dbmi=Double.valueOf(sbmi);
BMIText.setText("您的BMI:"+dbmi);
//判断
tp.setImageResource(R.drawable.tu1);
if(dbmi<=18.4){
classificationText.setText("偏瘦,建议多吃点东西");
}
else if(dbmi<=23.9){
classificationText.setText("正常,继续保持");
}
else if(dbmi<=27.9){
classificationText.setText("过重,建议少吃点东西,多锻炼身体");
}
else {
classificationText.setText("肥胖,建议少吃多运动");
}
}
}
Run结果展示:
加油!