android学习第二天(第一个案例:电话拨号器)

       前言:看本文章有任何问题可以联系QQ:454633390  一起努力,共同进步,每天更新我学习的内容大笑    

做的第一个算是比较正式小应用,先上图:

          功能很简单,就是一个简单的窗口,在窗口中有一个文本框,一个按钮,一段文本,在文本框中输入数字点击拨号,会调用android系统本身的拨号应用。
 

          然后就是按照正常流畅创建一个android application project,项目创建完了我们就开始画一个界面

(android应用都是从画界面开始的)
首先打开:res-layout目录,找到activity_main.xml,初始化的时候布局方式是RelativeLayout,因为我们界面用的是线性布局所以要修改成LinearLayout布局方式,修改方式为:

点击预览窗口 Graphical Layout 

 然后在中央空白处右击:选择 change layout 然后在弹出的界面选择 如图:



 然后在界面上画一个个组件

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/cntrolname" 
     />
    <EditText
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/mobile" />

    <Button
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/button"
        android:id="@+id/button" />

 其中TextView相当于java中的Label;EditTest相当于java中的TestFiled,每一个组件初始化的时候都要填写2个属性android:layout-width   android:layout-height  属性值fill-parent代表的是填充全部范围,所以文本框填充的是水平屏幕的宽度 ,   wrap_content代表的是包含,也就是说你有几行文字它就得把这几行文字给包含起来。

在所有的3个组件内容中我们都有看到一个表达式 @string/*** 意思是:从res资源目录中的Values文件夹下面的strings.xml找key对应的Value值。strings.xml内容如下:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">电话拨号器</string>
    <string name="action_settings">Settings</string>
    <string name="cntrolname">请输入你的手机号</string>
    <string name="button">拨号</string>
</resources>

 当然你也可以直接写 android:text="拨号"这样的模式,但是这样写不方便管理不利于国际化处理。

还有如果以后项目大了一个strings.xml文件如果存放太多的key:values值会显得很臃肿,我们可以在values文件夹下面新建string2.xml文件,调用方式和原先一样。

另外表达式 @+id/**的意思是给该组件在R.java中赋值一个唯一的ID,让其在.java代码中可以调用到该组件

调用方式是: R.id.button

注意:在res资源目录下面修改或创建的任何东西都会在R.java中保存记录,在前面文章中提到过(如果是新建一个文件会在R.java中增加一个内部类,如果是修改文件会在R.java中修改内部类中的变量)

布局完成后在入口类MainActivity.java中给其添加监听方法,代码如下: 

package com.example.phone;

import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		//通过findViewById方法找到窗口中的组件,并给组件添加监听方法
		Button bt = (Button) this.findViewById(R.id.button);
		// bt.setOnClickListener(new OnclickListener());
		bt.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				EditText et = (EditText) findViewById(R.id.mobile);
				String value = et.getText().toString();
				Intent it = new Intent();
				it.setAction("android.intent.action.CALL");
				// it.addCategory("android.intent.category.DEFAULT");
				it.setData(Uri.parse("tel:" + value));
				startActivity(it);// 方法内部会自总会Intent方法添加类别android.intent.category.DEFAULT,根据类别找到action,根据action找到activity
			}
		});
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	private final class OnclickListener implements View.OnClickListener {

		@Override
		public void onClick(View v) {
			EditText et = (EditText) findViewById(R.id.mobile);
			String value = et.getText().toString();
			Intent it = new Intent();
			it.setAction("android.intent.action.CALL");
			// it.addCategory("android.intent.category.DEFAULT");
			it.setData(Uri.parse("tel:" + value));
			startActivity(it);// 方法内部会自总会Intent方法添加类别android.intent.category.DEFAULT,根据类别找到action,根据action找到activity
		}
	}

}
 添加监听方法我采用了2种都在程序中表明,因为我们做的是电话拨号器而android系统本身就自带了拨号应用,所以我们可以在我们的项目中直接调用拨号应用。

应用中的通信是通过Inent(汉译:意愿)来进行交流;首先New一个Intent对象,然后告诉该对象你要找谁?也就是

it.setAction("android.intent.action.CALL");//给系统说我要找拨号应用
 另外根据拨号应用要传递数据的格式在塞入数据 it.setData(Uri.parse("tel:" + value)); 最后启动通信(开始寻找) startActivity(it);

 

注意:因为我们调用的是android系统本身自带的应用而android系统有安全机制,会询问你该通信是否合法,所以我们需要给其一个通行证,也就是说声明一个权限。

赋予权限是在res根目录下面的AndroidMainfest.xml中 

<uses-permission android:name="android.permission.CALL_PHONE" />该代码要放在<application>外面

OK,该电话拨号器小应用正式完成,效果如图:



 

猜你喜欢

转载自ppboyhai.iteye.com/blog/1977837