之前学习了3.Android-ADT之helloworld项目结构介绍后,本章便来写个简单的电话拨号器程序.

实现的步骤如下所示:

  • 1.创建项目
  • 2.写layout/activity_main.xml布局文件(画ui),实现显示效果
  • 3.写MainActivity.java代码,实现具体逻辑功能
  • 4.启动APP看效果

1.创建项目

设置项目名称后,一直点next,直到finish.

创建好的layout/activity_main.xml布局界面如下所示:

对应的布局xml如下所示:

<RelativeLayout 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:paddingBottom="@dimen/activity_horizontal_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" > <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" /> </RelativeLayout>

我们可以看到只要是layout_widthlayout_height属性的值是写的直接值外,其它的全部用的是索引标记的(@XXX/YYYY),这些索引指针地址都会存在R.java中,而对应的索引内容都会存在values/XXXs.xml中(比如@dimen位于dimens.xml,而string位于strings.xml)

以@string/hello_world为例:

在R.java中

在values/strings.xml中

所以TextView控件上则显示hello world!

为什么需要索引,而不是直接写为: android:text="hello world!"

答:为了语言国际化,因为索引指向的值是可以替换的,我们默认使用的都是values/xxx.xml下的索引内容,如果我们设置为English的话,就可以改为values-en/xxx.xml下的英文索引内容(在后面国际化章节学习).

而直接写入的话,则不能实现语言国际化.

分析RelativeLayout之属性值

  • RelativeLayout :表示相对布局的意思,这里表示将当前界面设置为相对布局.
  • android:layout_width和android:layout_height: 设置布局的宽高,对于界面布局而言,这里只能设置为"match_parent"(填满父控件)。
  • android:paddingXXX: 内边框,表示该界面布局内部的控件距离本身边缘有多远
  • tools:context=".MainActivity" : 表示这个xml布局文件关联的是src/MainActivity.java类(用来实现具体逻辑功能)

分析TextView之属性值

TextView用于显示常规文字(不能被修改)的控件

注意: 要想显示控件,必须指定layout_width和layout_height(宽高)

对于控件的宽高设置有三种值可填,如下图所示:

"fill_parent"   //强制让它布满填满父控件的空白

"wrap_content" //设置控件高度刚好能够显示当前内容的大小

"match_parent" //和fill_parent是一个意思,他们的定义本质是一样的,均为-1,只是换了别名,为了命名更准确些, 官方更推荐使用match_parent

2. 写layout/activity_main.xml布局文件(画ui)

最终界面如下图所示:

3.写MainActivity.java代码

在MainActivity.java里主要创建了一个MainActivity类,继承于Activity,如下图所示:

接下来我们便来介绍Activity.

3.1 Activity介绍

一个活动是一个单一的,集中的事情,用户可以做。几乎所有的活动都与用户交互,因此Activity类负责为您创建一个窗口,您可以在其中放置带有setContentView(View)的UI。虽然活动通常作为全屏窗口呈现给用户,但它们也可以以其他方式使用:作为浮动窗口(通过windowisfloat设置的主题)或嵌入到另一个活动中(使用ActivityGroup)。有两个方法,几乎所有子类的活动将实现:

  • onCreate(Bundle) :用于初始化activity的地方,当activity创建的时候会被调用,这里通常使用定义UI的布局资源调用setContentView(int),并使用findViewById(int)检索UI中需要以编程方式交互的小部件。
  • onPause():是处理用户离开活动的地方。最重要的是,此时用户所做的任何更改都应该提交(通常是提交给持有数据的ContentProvider)。

3.2 写MainActivity.java

package com.example.phonecall;
import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.text.TextUtils;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast; //添加继承OnClickListener点击事件类,然后覆写onClick()
public class MainActivity extends Activity implements OnClickListener {
private EditText et_number; //文本框对象 @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); //加载要显示的界面UI
//1.找到EditText,然后设置按键按下监听
et_number = (EditText) findViewById(R.id.editText1);
Button bt_call = (Button) findViewById(R.id.button1);
bt_call.setOnClickListener(MainActivity.this); //MainActivity.this表示MainActivity类 } @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu); //点击菜单按钮时,则显示菜单界面
return true;
} @Override
public void onClick(View v) {
System.out.println("on click"); String number = et_number.getText().toString().trim(); //2.获取内容 if(TextUtils.isEmpty(number)){
Toast.makeText(MainActivity.this, "内容不能为空", Toast.LENGTH_SHORT).show(); //显示一个提示的浮动显示块 }else{ Intent intent = new Intent();
intent.setAction(intent.ACTION_CALL); //设置intent要执行的动作, ACTION_CALL表示打电话
intent.setData(Uri.parse("tel:"+number)); //uri和url类似,但是uri可以自定义多个协议,”tel:“+number表示给number打电话
startActivity(intent); //通过intent(意图)来实现应用间的交互与通讯,从而实现人的意图
}
}
}

注意 导入包点击监听事件的包时,选择第二个"android.view.view" :

否则的话,onClick(View v)会变为onClick(DialogInterface dialog,int which)。

3.3 然后添加打电话申请权限(用于是否支持从应用中直接打电话)

在AndroidManifest清单->Permissions里选择Users Permission.

然后添加android.permission.CALL_PHONE

4.然后启动APP

5.Android-电话拨号器详解的更多相关文章

  1. [Android]电话拨号器开发

    继续今天的Android,经过昨天大体了解了Android开发的一些基本文件结构,今天来做一个电话拨号器! 预期达到的效果 实现过程 首先还是按照昨天第一篇教程,新建一个项目叫PhoneCall的An ...

  2. android 电话拨号器

    电话拨号器(重点)            1.产品经理: 需求分析文档,设计原型图    2.UI工程师: 设计UI界面    3.架构师: 写架构,接口文档    4.码农: 服务端,客户端     ...

  3. 初识安卓小程序(Android电话拨号器)

    首先,先创建一个安卓项目(我的版本号是4.4.2的),名字为"电话拨号器",创建的时候点击"clipart",如图: 然后在res目录下找到layout目录,找 ...

  4. Android电话拨号器_06

    在Android模拟器中开发时,有时需要模拟拨打电话功能,由于模拟器不能直接当做真机使用,所以我们需要再模拟器中模拟真机拨打电话,首先需要创建两个模拟器,当做两部Android手机来使用.由于Andr ...

  5. Mono for Android—初体验之“电话拨号器”

    1.Main.axml文件: <?xml version="1.0" encoding="utf-8"?><LinearLayout xmln ...

  6. 无废话Android之常见adb指令、电话拨号器、点击事件的4种写法、短信发送器、Android 中各种布局(1)

    1.Android是什么 手机设备的软件栈,包括一个完整的操作系统.中间件.关键的应用程序,底层是linux内核,安全管理.内存管理.进程管理.电源管理.硬件驱动 2.Dalvik VM 和 JVM ...

  7. android之电话拨号器

    在android入门的案例中,除了HelloWorld这个经典案例,还有一个电话拨号器需要掌握,现在我就来个电话拨号器的示范,毕竟大牛也是从菜鸟进化而来的. 首先你应该知道自己要设置怎样的UI,然后创 ...

  8. Android入门——电话拨号器和四种点击事件

    相对于HelloWorld来说,电话拨号器也是Android的一个入门demo,从这个样例我们要理清楚做安卓项目的思路. 大体分为三步: 1.理解需求,理清思路 2.设计UI 3.代码实现 电话拨号器 ...

  9. Android学习之电话拨号器

    本人自己是做android驱动的,也会接触到系统层.上层的应用,所以在闲暇的时候也就开始了学习android应用的路程,在这里把这些东西记下来,希望自己能坚持下去,也好以后复习用. 今天先实现一个简单 ...

随机推荐

  1. 为什么在留言处插入<script>alert(1)</script>不弹框

    对于新手来说,往往会在留言地方插入<script>alert(1)</script>来检测是否有存储xss,事实是基本上不会弹框的,为啥? 通过查看源码,可知道<> ...

  2. azure 第一弹

  3. [ Python入门教程 ] Python中日期时间datetime模块使用实例

    Python中datetime模块提供强大易用的日期处理功能,用于记录程序操作或修改时间.时间计算.日志时间显示等功能.datatime模块重新封装了time模块,提供的类包括date.time.da ...

  4. vue-cli3 axios解决跨域问题

    这种错误就是跨域问题: 我百度了各种方法,最终下面这种方法解决了,直接上代码:  解决: 如果没安装axios: npm install axios -save //安装axios main.js / ...

  5. Quartz.Net和队列应用demo

    using System; using System.Collections.Generic; using System.Threading; namespace ConsoleApplication ...

  6. docker启动redis端口映射错误问题解决

    今天使用docker安装redis,使用的时候出现了一些问题.第一次安装好后,在虚拟机后台启动了redis,然后在连接虚拟机的redis的时候怎么也连不上.出现这种情况我第一反应是防火墙没有开启所以我 ...

  7. 【阿里云IoT+YF3300】12.阿里云IoT Studio入门介绍

    阿里云IoT Studio是针对物联网场景提供的生产力工具,可覆盖各个物联网行业核心应用场景,帮助您高效经济地完成设备.服务及应用开发.物联网开发服务提供了移动可视化开发.Web可视化开发.服务开发与 ...

  8. centos7 手把手从零搭建深度学习环境 (以TensorFlow2.0为例)

    目录 一. 搭建一套自己的深度学习平台 二. 安装系统 三. 安装NVIDA组件 四. 安装深度学习框架 TensorFlow 五. 配置远程访问 六. 验收 七. 福利(救命稻草

  9. 题解【[HNOI2010]弹飞绵羊】

    \[ \texttt{Description} \] 有 \(n\) 个弹力装置排成一排,第 \(i\) 个弹力装置的弹力系数是 \(k_i\) ,绵羊到第 \(i\) 个装置时,会被弹到第 \(i+ ...

  10. Golang设置https访问,以及http如何重定向到https

    设置https访问: 原始代码为http监听: func main() { server := &http.Server{ Addr: ":8080", ... } go ...