移动应用开发 实验二:标准身高计算器

文章目录

  • 准备工作
  • 一,创建Android Studio项目
  • 二,创建活动模块
  • 三,设计用户界面
    • (一)设置页面布局
    • (二)添加标题文本控件
    • (三)设计体重输入框
    • (四)设计性别选项
    • (五)设计按钮和结果存放区
    • (六)运行查看效果
  • 四,编写活动代码
  • 五,运行项目


准备工作

  • 搭建开发环境
    JDK1.8,Android Studio

  • UI界面效果
    在这里插入图片描述

一,创建Android Studio项目

1,新建Android Studio项目,单击new Project。

在这里插入图片描述
2,选择phone and tablet——empty activity。

在这里插入图片描述

3,输入项目名称:HeightCalculator,语言选择Java,单击Finish。

在这里插入图片描述
4,等待下载全局配置依赖。

在这里插入图片描述5,下载完成,页面效果。
在这里插入图片描述6,单击运行按钮,启动项目,如下效果,成功创建项目。
在这里插入图片描述

二,创建活动模块

1,在项目目录右击选择——new——Activity——empty Activity。
在这里插入图片描述

2,输入名称:HeightCalculatorActivity,单击finish按钮,创建活动。
在这里插入图片描述
3,创建完成。
在这里插入图片描述

三,设计用户界面

(一)设置页面布局

1,进入code页,编写代码。
在这里插入图片描述
2,进入design页,可以使用拖动的方式添加布局方式和控件。
在这里插入图片描述
3,添加线性布局,根据效果图,页面整体布局为垂直;这里设置为垂直:android:orientation="vertical"
在这里插入图片描述

(二)添加标题文本控件

在这里插入图片描述源码:

<TextViewandroid:layout_width="410dp"android:layout_height="100dp"android:gravity="center"android:text="标准身高计算器"android:textAlignment="center"android:textSize="30sp"android:textStyle="bold" />

(三)设计体重输入框

1,根据下面效果图,这是一个水平布局,包含三个控件。
在这里插入图片描述
2,首先,先添加一个水平布局,android:orientation="horizontal",表示水平布局。
在这里插入图片描述

3,在水平布局下添加文本视图控件(相当于标签,显示文本)。
在这里插入图片描述
4,添加一个输入框控件,用于接收用户输入的数据,并且给上一个id值,后续编写Java代码接收信息。
在这里插入图片描述5,最后再添加一个文本视图控件,用于显示最后的单位。
在这里插入图片描述

(四)设计性别选项

1,分析:从下图中也可发现这是一个水平布局,并且两个单选按钮是绑定在一起的(如不是共同,则性别就可以全选,就失去了单选按钮的特点,出现逻辑错误)。
在这里插入图片描述
2,根据分析,此时再添加一个水平布局,二级的布局方式,与体重输入框布局属于同级。
在这里插入图片描述

<LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:orientation="horizontal"></LinearLayout>

3,添加文本视图控件。
在这里插入图片描述

<TextViewandroid:layout_width="150.0dip"android:layout_height="wrap_content"android:layout_gravity="center"android:text="请选择你的性别:"android:textSize="18sp" />

4,添加单选控件组,将两个单选按钮绑定到一起。
在这里插入图片描述

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

5,在控件组中添加两个单选按钮控件。
在这里插入图片描述

<RadioButton                       android:id="@+id/man"          android:layout_width="50.0dip" android:layout_height="70.0dip"android:checked="true"         android:text="" />            <RadioButton                       android:id="@+id/woman"        android:layout_width="50.0dip" android:layout_height="70.0dip"android:text="" />            

(五)设计按钮和结果存放区

1,添加水平布局,在布局下添加按钮控件。
在这里插入图片描述

<LinearLayout                               android:layout_width="fill_parent"      android:layout_height="wrap_content"    android:gravity="center_horizontal"     android:orientation="horizontal">       <Button                                 android:id="@+id/calculator"        android:layout_width="200.0dip"     android:layout_height="wrap_content"android:layout_marginTop="20.0dip"  android:text="运算 " />               
</LinearLayout>                             

2,添加水平布局,在其中添加文本视图控件用于存放结果(添加id)。
在这里插入图片描述

<LinearLayout                                android:layout_width="fill_parent"       android:layout_height="wrap_content"     android:gravity="center_horizontal"      android:orientation="horizontal">        <TextView                                android:id="@+id/result"             android:layout_width="wrap_content"  android:layout_height="wrap_content" android:layout_marginTop="10.0dip" />
</LinearLayout>                              

(六)运行查看效果

1,右击身高计算器的Java文件,单击运行按钮。
在这里插入图片描述
2,弹出如下提示,无法运行(原因是没有配置运行配置文件:AndroidManifest.xml)。
在这里插入图片描述
3,打开AndroidManifest.xml,设置android:exported="true",在单击运行按钮。
在这里插入图片描述
4,模拟器显示出正常页面,没有什么问题。
在这里插入图片描述

四,编写活动代码

编写HeightCalculatorActivity.java,实现计算标准身高。
在这里插入图片描述

package com.example.heightcalculator;import androidx.appcompat.app.AppCompatActivity;import android.app.AlertDialog;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.TextView;public class HeightCalculatorActivity extends AppCompatActivity {private Button calculatorButton;private EditText weightEditText;private RadioButton manRadioButton;private RadioButton womanRadioButton;private TextView resultTextView;private static final int EXIT=1;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_height_calculator);calculatorButton=(Button)findViewById(R.id.calculator);weightEditText=(EditText)findViewById(R.id.weight);manRadioButton=(RadioButton)findViewById(R.id.man);womanRadioButton=(RadioButton)findViewById(R.id.woman);resultTextView=(TextView)findViewById(R.id.result);}@Overrideprotected void onStart() {super.onStart();registerEvent();}private void registerEvent(){calculatorButton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if(!weightEditText.getText().toString().trim().equals("")){double weight=Double.parseDouble(weightEditText.getText().toString());StringBuffer sb=new StringBuffer();sb.append("------------评估结果----------- \n");if(manRadioButton.isChecked()){sb.append("男性标准身高:");double result=evaluateHeight(weight,"男");sb.append((int)result+"(厘米)");}else if(womanRadioButton.isChecked()){sb.append("女性标准身高:");double result=evaluateHeight(weight,"女");sb.append((int)result+"(厘米)");}resultTextView.setText(sb.toString());}else{showMessage("请输入体重!");}}});}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {menu.add(Menu.NONE, EXIT, Menu.NONE, "退出");return super.onCreateOptionsMenu(menu);}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {if(item.getItemId()==EXIT){finish();//退出程序}return super.onOptionsItemSelected(item);}private double evaluateHeight(double weight,String sex){double height;if(sex=="男"){height=170-(62-weight)/0.6;}else{height =158-(52-weight)/0.5;}return height;}private void showMessage(String message){AlertDialog alert = new AlertDialog.Builder(this).create();alert.setTitle("系统信息");alert.setMessage(message);alert.setButton("确定", (dialog, whichButton) -> {});alert.show();}}

五,运行项目

1,单击运行按钮。
在这里插入图片描述
2,启动成功。在这里插入图片描述

3,输入体重,得出结果。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/6036.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

这个超级棒,我收藏的样机素材,统统分享给你们

Hello&#xff0c;大家好&#xff0c;我是后期圈&#xff01;工作不息摸鱼不止&#xff01;继续给圈友们带来有趣好玩的推荐&#xff0c;圈友们在摸鱼的同时别忘记多多点赞支持一波呀 今天给大家分享 4个超实用效率高质量网站&#xff0c;请各位偷偷收藏使用&#xff0c;懂得都…

管理 Elasticsearch 变得更容易了,非常容易!

作者&#xff1a;来自 Elastic Ken Exner Elasticsearch 用户&#xff0c;我们听到了你的心声。管理 Elasticsearch 有时会变得很复杂&#xff0c;面临的挑战包括性能调整、问题检测和资源优化。我们一直致力于简化你的体验。今天&#xff0c;我们宣布了自收购 Opster 以来的一…

spark-本地模式的配置和简单使用

python环境的安装 在虚拟机中&#xff0c;只能安装一个python的版本&#xff0c;若想要安装别的版本&#xff0c;则需要卸载之前的版本——解决方式&#xff0c;安装Anaconda 通过百度网盘分享的文件&#xff1a;Anaconda3-2021.05-Linux-x86_64.sh 链接&#xff1a;https://…

将vscode的终端改为cygwin terminal

现在终端是默认的power shell&#xff0c;没有显示cygwin 接下来选择默认配置文件 找到cygwin的选项即可 然后提示可能不安全什么的&#xff0c;点是&#xff0c;就有了

Node.js简介以及安装部署 (基础介绍 一)

Node.js简介 Node.js是运行在服务端的JavaScript。 Node.js是一个基于Chrome JavaScript运行时建立的一个平台。 Node.js是一个事件驱动I/O服务端JavaScript环境&#xff0c;基于Google的V8引擎&#xff0c;V8引擎执行Javascript的速度非常快&#xff0c;性能非常好。 Node.…

【MySQL 保姆级教学】深层理解索引及其特性(重点)--上(11)

MySQL与磁盘 1. MySQL与内存和磁盘的联系2. 认识磁盘2.1 MySQL与存储2.2 磁盘结构2.3 扇区2.4 定位扇区 3. MySQL与磁盘交互基本单位4. 建立共识5. 索引的理解5.1 建立一个表并查询5.2 为何 I/O 交互要是Page 6. B树 Vs B 树数6.1 不同存储引擎支持的索引结构类型6.2 B树 Vs B树…

修改云服务器远程默认端口

操作场景 由于使用系统默认端口的风险较大&#xff0c;容易被攻击软件扫描以及攻击&#xff0c;为避免因端口攻击而无法远程连接云服务器&#xff0c;您可将云服务器默认远程端口修改为不常见的端口&#xff0c;提高云服务器的安全性。 修改服务端口需在安全组规则与云服务器…

0xGame 2024 [Week 4] Jenkins

1.前言 由于好久没做web题了&#xff0c;所以今天来尝试来做一波web题&#xff0c;仅供刷题记录。 2.题目 这个给的提示对于小白来说实在是友好的过劲。 3.分析 上网搜到一个关于Jenkins的历史漏洞&#xff0c;下面链接可供参考 https://blog.csdn.net/2301_80127209/arti…

10天进阶webpack---(1)为什么要有webpack

首先就是我们的代码是运行在浏览器上的&#xff0c;但是我们开发大多都是利用node进行开发的&#xff0c;在浏览器中并没有node提供的那些环境。这就造成了运行和开发上的不同步问题。 -----引言 浏览器模块化的问题&#xff1a; 效率问题&#xff1a;精细的模块划分带来了更…

好累-还要复习

第一次碰到无极值改变区间长度特征值的关系迹对应的特征向量是原来的一列 共轭的考虑两项相加 那么就有两种情况 观察数列函数&#xff0c;构建拉格朗日&#xff08;非常重要&#xff09;

Maven从浅入深(理解篇)

前言 在软件开发领域&#xff0c;包管理器是不可或缺的工具&#xff0c;它们帮助开发者管理和维护项目中的依赖库。通过对比.NET的NuGet包、Python的pip包以及Java的Maven&#xff0c;我们可以从原理上更深刻地理解这些工具的作用和差异。 1. NuGet&#xff08;.NET&#xff0…

Ollama AI 框架缺陷可能导致 DoS、模型盗窃和中毒

近日&#xff0c;东方联盟网络安全研究人员披露了 Ollama 人工智能 (AI) 框架中的六个安全漏洞&#xff0c;恶意行为者可能会利用这些漏洞执行各种操作&#xff0c;包括拒绝服务、模型中毒和模型盗窃。 知名网络安全专家、东方联盟创始人郭盛华表示&#xff1a;“总的来说&…

【多模态读论文系列】MINIGPT-4论文笔记

【多模态读论文系列】LLaMA-Adapter V2论文笔记 【多模态读论文系列】LLaVA论文笔记 分享第三篇多模态论文阅读笔记 MINIGPT-4: ENHANCING VISION-LANGUAGE UNDERSTANDING WITH ADVANCED LARGE LANGUAGE MODELS 论文地址&#xff1a;https://arxiv.org/pdf/2304.10592 代码…

安信金控:古法金与普通金的区别

古法金和普通金在制作工艺、外观特点、硬度和耐磨性以及价格等方面存在明显差异。本文详细比较了古法金与普通金的区别&#xff0c;供大家参考。 一、制作工艺 1. 古法金 古法金采用传统的铸金工艺&#xff0c;过程复杂且耗时。主要工艺包括&#xff1a; 搂胎&#xff1a;使…

2023下半年上午(22~38)

二十二、 选A 现在定义一个函数&#xff0c;里面有非静态的局部变量f1 在栈区stack里面&#xff0c;先是主函数main入栈&#xff0c;然后调用main里面的方法&#xff0c;即function&#xff08;&#xff09;入栈&#xff0c;在入栈的一瞬间&#xff0c;局部变量f1就被定义了&a…

使用 GPT-4V 全面评估泛化情绪识别 (GER)

概述 由于情绪在人机交互中扮演着重要角色&#xff0c;因此情绪识别备受研究人员关注。目前的情感识别研究主要集中在两个方面&#xff1a;一是识别刺激物引起的情感&#xff0c;并预测观众观看这些刺激物后的感受。另一个方面是分析图像和视频中的人类情绪。在本文中&#xf…

[代码随想录打卡]Day2:209.长度最小的子数组 59.螺旋矩阵II 区间和 开发商购买土地 总结

双指针&#xff1a;快慢指针、对撞指针、滑动窗口。相关博客&#xff1a;双指针算法详解&#xff08;快慢指针、对撞指针、滑动窗口&#xff09; 209.长度最小的子数组 题目&#xff1a;给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于…

list与iterator的之间的区别,如何用斐波那契数列探索yield

问题 list与iterator的之间的区别是什么&#xff1f;如何用斐波那契数列探索yield&#xff1f; 2 方法 将数据转换成list,通过对list索引和切片操作&#xff0c;以及可以进行添加、删除和修改元素。 iterator是一种对象&#xff0c;用于遍历可迭代对象&#xff08;如列表、元组…

就是这个样的粗爆,手搓一个计算器:JSON格式化计算器

作为程序员&#xff0c;没有合适的工具&#xff0c;就得手搓一个&#xff0c;PC端&#xff0c;移动端均可适用。废话不多说&#xff0c;直接上代码。 HTML: <div class"calculator"><label for"jsonInput">输入 JSON 字符串:</label> …

PaddleNLP的FAQ问答机器人

项目源码获取方式见文章末尾&#xff01; 600多个深度学习项目资料&#xff0c;快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【DDRNet模型创新实现人像分割】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模型实…