之前学习了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. Docker windows nano server容器中安装ssh实现远程登录管理

    [问题] 使用ServiceMonitor.exe作为前台进程运行起来的容器无法attach. 无法远程连接到运行中的容器中进行管理. [解决方法] 在container中新建管理员用户,通过SSH实 ...

  2. 在动作方法中生成输出URL (Generating Outgoing URLs in Action Methods) |

  3. Python3中的super()函数详解

    关于Python3中的super()函数 我们都知道,在Python3中子类在继承父类的时候,当子类中的方法与父类中的方法重名时,子类中的方法会覆盖父类中的方法, 那么,如果我们想实现同时调用父类和子 ...

  4. 小程序--->scroll-view组件不能触发相应滚动事件

    小程序scroll-view组件不能触发相应滚动事件 在制作加载更多时会发现不能触发相应事件,一般情况下首先要查看两个必要的属性scroll-view的高度是否设置,第二就是scroll-view的滚 ...

  5. 宝塔面板管理阿里云服务器FTP不能用

    # 宝塔面板管理阿里云,ftp不能用 解决方法 搜ftp点击设置 然后Ctrl+F搜索ForcePassiveIP 注意2在默认情况下是带#号的,去掉#号,后面的ip地址是阿里云的公网ip 重启,再次 ...

  6. kali linux下的部分命令

    查看发行版本 cat    /etc/issue cat   /etc/*-release 查看内核版本 uname  -a 显示机器的处理器架构 arch uname -m 清屏 clear 命令行 ...

  7. Maven 项目无法在Ecplise加进tomcat server

    当把用Maven项目 加进 tomcat server 时,出现 "There are no resources that can be added or removed from the ...

  8. 12、PPP和HDLC

    PPP主要包括三个部分1.    在串行链路上封装上层数据报文的方法2.    LCP(link control protocals): 链路控制协议来配置和测试数据通信链路,协商PPP协议的配置参数 ...

  9. C#中? 和 ??的区别

    背景 最近在调试C#项目的时候,发现一个比较关于??的特殊用法,当时把我给惊到了,所以特意用这篇短短的笔记来记录一下我的解惑过程: 示例代码: showsomething(isNameNull ?? ...

  10. Android: Fragment编程指南

    本文来自于www.lanttor.org Fragment代表了Activity里的一个行为,或者Activity UI的一部分.你可以在一个activity里构造多个Fragment,也可以在多个a ...