Android开发手把手入门精讲1:英里公里转换器

安装好Android Studio(这里的版本是Android Studio Arctic Fox | 2020.3.1 Patch 4),等待gradle和其他组件自动安装完成,就可以新建工程。这里不讨论安装、配置、新建虚拟设备或连接硬件设备等前置操作,因为网上已有很多资源。这里从新建工程操作完成后开始讲

项目需求:输入英里(Mile)或公里(Kilometer)值,实现相互转换。

零、项目结构

工程(project)页面是一个树状结构,长下面这样。本文的操作只涉及这两个xml文件和MainActivity(.java)文件,不讨论其他文件。

一. 配置app/res/layout/activity_main.xml

这个文件存放了布局信息。有两个子页面,可视化布局配置Design和代码布局配置Code,这两个子页面也可以选择split同时显示。这里重点讲Design。

Design页面配置很直观方便,就是把Palette里面的View拖拽到页面内。白底页面显示View的外观,蓝底是各个View的名字。添加View后可以修改View的参数,如id、Text等。注意AndroidStudio内View的位置信息不一定是相对于主窗体的,有可能是相对于紧邻的另一个View,具体需要在属性窗体单独配置。若没有Anchor(锚定)View的位置,实际运行调试代码时控件很可能错位,叠在一起或者找不到了,都是可能的(悲)。

其他的属性设置都好说,锚定则不那么显而易见。那么锚定是什么样子呢?

这是锚定后。选中View,被锚定的方向会显示一个带数字的箭头,数字(单位pd)表示相对距离,箭头指向参照物。而属性界面的Constraint Widget中,点击红框内的实心黑点,就可以取消该方向的锚定,取消锚定后黑点变为叉号,点击叉号又可以恢复锚定。修改红框内的数字,可以修改锚定距离值。

值得注意的是,如果参照物是另一个View,两个View之间的距离应该是View1到View2锚定距离+View2到View1的锚定距离。两个距离不必相等。比方说Miles与Kilometers这两个view,Mile到下方的Kilometers相对距离为20,Kilometers到上方的Miles相对距离为70,那么这两个控件的实际距离就是20+70=90。

在主界面放置两个TextView作为提示标签,两个EditText作为输入框,两个Button作为触发控件。在Code子页面修改EditText的属性

android:inputType="numberDecimal"
        

 这样可以保证输入到EditText控件中的值都是Decimal。但这不代表可以忽略异常捕获了,因为用户可能会输入“.”,也可能什么都不输入,保留原有的空值,这些异常输入都可能导致程序崩溃,极度危险。

二、配置MainActivity(.java)

java文件功能强大,可以配置控件动作、逻辑,也可以编辑布局。在java文件中编辑布局更灵活,而不编辑布局则可以实现布局配置与逻辑响应的解耦。这里不在java中编辑布局。

先上代码

package com.example.milekmconversion;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import java.text.DecimalFormat;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button buttonconvertK2M = (Button)findViewById(R.id.buttonConvertK2SM);
        Button buttonconvertM2K = (Button)findViewById(R.id.buttonConvertM2K);
        EditText textMile = (EditText)findViewById(R.id.textMile);
        EditText textKm = (EditText)findViewById(R.id.textKm);
        DecimalFormat format = new DecimalFormat("##.##");
        double k = 1.609;

        buttonconvertK2M.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try{
                    double km =  Double.parseDouble(textKm.getText().toString());
                    double mile = km/k;
                    textMile.setText(format.format(mile));
                }
               catch(Exception e){
                   Toast.makeText(getApplicationContext(), "Please enter a valid number for kms", Toast.LENGTH_SHORT).show();
               }

            }
        });
        buttonconvertM2K.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try{
                    double mile =  Double.parseDouble(textMile.getText().toString());
                    double km = mile*k;
                    textKm.setText(format.format(km));
                }
                catch (Exception e){
                    Toast.makeText(getApplicationContext(),"Please enter a valid number for miles",Toast.LENGTH_SHORT).show();
                }
            }
        });

    }
}

解释几个基础的语法点

1. 

setContentView(R.layout.activity_main);

这个语句把MainActivity.java和上面配置的activity_main.xml布局为文件关联起来

2.

 Button buttonconvertK2M = (Button)findViewById(R.id.buttonConvertK2SM);

findViewById方法的参数是view的id值,注意R.id.不能省略。

3. 

DecimalFormat format = new DecimalFormat("##.##");
//给mile赋值
textMile.setText(format.format(mile));

构建DecimalFormat的一个实例format,"##.##"表示最多保留两位小数,format.format((decimal) mile)表示把decimal类型的参数转换为format格式的文本类型。setText方法则把EditText类型的textMile控件的Text值设置为该文本。

4. 

Toast.makeText(getApplicationContext(), "Please enter a valid number for kms", Toast.LENGTH_SHORT).show();

Toast类的maketext().show()操作可以实现弹窗。注意没有show()就不会弹窗。第三个参数可以选择Toast.LENGTH_SHORT或Toast.LENGTH_LONG,short弹窗时间为2s,long为3.5s。

5.  

buttonconvertK2M.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try{
                    double km =  Double.parseDouble(textKm.getText().toString());
                    double mile = km/k;
                    textMile.setText(format.format(mile));
                }
               catch(Exception e){
                   Toast.makeText(getApplicationContext(), "Please enter a valid number for kms", Toast.LENGTH_SHORT).show();
               }

            }
        });

给按钮控件添加单击事件监听响应有很多方法,这里介绍其中一种,即setOnClickListener()方法。

代码完成后,点击“运行”,就可以在虚拟设备或实体手机上查看app实际效果啦。 

如果你对安卓开发感兴趣,欢迎留言提需求,博主会天天向上,尽力满足你的~

  • 24
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值