博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
走在Android开发的路上(二):Android快速入门
阅读量:5025 次
发布时间:2019-06-12

本文共 8135 字,大约阅读时间需要 27 分钟。

  自从写了第一篇之后,我一直在考虑第二篇该如何写,要是像书本一样一个个介绍下去甚是无味也没这个精力,所以再三思索决定第二篇写个快速入门,让初学者可以迅速上手Android(当然你必须有一定的JAVA基础),然后从下一篇开始就写实际开发中遇到的问题以及一些API的使用方法。言归正传,下面我们就开始今天的介绍:

  打开你的Eclipse,点击File--->New--->Android Project,出现如下界面,我们将项目名叫做:CnBlog:

  点击Next,出现如下界面,这里用来选择我们使用的Android版本,这里说下,你所选择的版本决定了你所支持的最低Android ROM的版本,也决定了你可以使用的方法,比如在2.3中出现的新方法,你选择了1.6是无法使用的,如何选择版本取决于你项目的要求,博主选择2.1,因为这可以兼容主流的Android手机。

  选择好之后点击Next,会出现如下页面,这里你可以设置你的包名,我们就设为com.cnblog.activity,让Eclipse自动为我们建一个Activity,我们就不改了,命名为CnBlogActivity,当然你可以改为自己的名字,一般我们都使用某个具有一定意义的单词加Activity结尾。Application Name就是你创建程序后显示的应用程序名。

  设好之后就可以点击完成了,你就可以在Eclipse中看到我们新建的项目:

  

    

  在上图我们可以看到一个Android项目的基本结构,src里面存放着我们的源代码,gen中我们可以看到一个R.java的java文件,这个文件是Eclipse给我们自动产生,此文件不需要开发者自行维护。往下看,我们可以看到res资源文件夹,里面有好多的文件夹,以drawable开头的是用来存放图片文件的,后面的h,l,m我想大家猜猜也知道,是用来区分不同分别率的。再看layout文件夹,这里面主要用来存放布局文件,而values文件夹主要用来存放一些常量文件,比如颜色常量和字符串常量。再往下看我们可以看到AndroidManifest.xml,他存储了应用程序的组件和节点,我们写好的Actvity,Service都需要在这里面配置,运行时才可以调用。

  好,下面我们就开始我们第一个项目,启动界面网络检测+调用系统拨号程序:

  首先我们来设计一下启动界面的布局:此处采用的是线性布局,里面有一个ImageView控件和一个TextView控件,至于这些标签的意思我就不再一一细说了,网上这些方面的讲解铺天盖地。

1 
2
6 7
12 13
22 23

  布局完之后我们就可以在我们的CnBlogActivity里面来进行逻辑操作了:

1 package com.cnblog.activity;  2  3 import android.app.Activity;  4 import android.app.AlertDialog;  5 import android.app.Dialog;  6 import android.content.DialogInterface;  7 import android.content.DialogInterface.OnClickListener;  8 import android.content.Intent;  9 import android.os.Bundle; 10 import android.os.Handler; 11 import android.provider.Settings; 12 import android.widget.TextView; 13 14 import com.cnblog.utils.ProNetworkManager; 15 16 public class CnBlogActivity extends Activity {
17 private Handler mHandler; 18 private TextView welcomeTextView; 19 20 @Override 21 public void onCreate(Bundle savedInstanceState) {
22 super.onCreate(savedInstanceState); 23 // 设置Activity的布局 24 setContentView(R.layout.main); 25 // 初始化变量 26 mHandler = new Handler(); 27 welcomeTextView = (TextView) findViewById(R.id.welcome_textview); 28 // 网络检测 29 networkCheck(); 30 } 31 32 private void networkCheck() {
33 new Thread(new Runnable() {
34 @Override 35 public void run() {
36 // 休眠500毫秒 37 try {
38 Thread.sleep(500); 39 } catch (InterruptedException e) {
40 e.printStackTrace(); 41 } 42 mHandler.post(new Runnable() {
43 @Override 44 public void run() {
45 welcomeTextView.setText("正在检测网络......"); 46 if (ProNetworkManager.IsExistNet(CnBlogActivity.this)) {
47 access(); 48 } else {
49 postDialog(); 50 } 51 } 52 }); 53 } 54 }).start(); 55 } 56 57 // 进入主界面 58 private void access() {
59 Runnable mDelay = new Runnable() {
60 @Override 61 public void run() {
62 startActivity(new Intent(CnBlogActivity.this, 63 HomeActivity.class)); 64 finish(); 65 } 66 }; 67 mHandler.postDelayed(mDelay, 1000); 68 } 69 70 // 设置网络提示框 71 private void postDialog() {
72 mHandler.post(new Runnable() {
73 @Override 74 public void run() {
75 Dialog dialog = new AlertDialog.Builder(CnBlogActivity.this) 76 .setTitle("注意").setMessage("检测到当前无网络连接,是否进行设置") 77 .setPositiveButton("设置", new OnClickListener() {
78 @Override 79 public void onClick(DialogInterface dialog, 80 int which) {
81 startActivity(new Intent( 82 Settings.ACTION_WIRELESS_SETTINGS)); 83 finish(); 84 } 85 }).create(); 86 dialog.show(); 87 } 88 }); 89 } 90 91 }

  这个里面涉及到了判断网络的操作,所以我们要在Mainifest文件中添加权限:<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />至于上段代码中涉及到的一些Android API我在这儿就不细讲了,后面有机会会再讲。

  好了,下面我们就来写我们的主界面,拨号程序,我们还是从布局文件开始写:

  

1 
2
6 7
12 13
19 20
27 28

  很简单的三个组件,文本,编辑框和按钮。好了,在创建一个Activity吧,我把它命名为HomeActivity,注意在Mainifest文件中配置:

1 package com.cnblog.activity;  2  3 import java.util.regex.Matcher;  4 import java.util.regex.Pattern;  5  6 import android.app.Activity;  7 import android.content.Intent;  8 import android.net.Uri;  9 import android.os.Bundle; 10 import android.os.Handler; 11 import android.view.Gravity; 12 import android.view.View; 13 import android.view.View.OnClickListener; 14 import android.view.Window; 15 import android.widget.Button; 16 import android.widget.EditText; 17 import android.widget.Toast; 18 19 public class HomeActivity extends Activity {
20 private EditText phoneNumEditText; 21 private Button phoneNumSubmitbButton; 22 private Handler mHandler; 23 24 @Override 25 protected void onCreate(Bundle savedInstanceState) {
26 requestWindowFeature(Window.FEATURE_NO_TITLE); 27 setContentView(R.layout.home_activity); 28 super.onCreate(savedInstanceState); 29 mHandler = new Handler(); 30 phoneNumEditText = (EditText) findViewById(R.id.phonenumber_text); 31 phoneNumSubmitbButton = (Button) findViewById(R.id.submit_button); 32 phoneNumSubmitbButton.setOnClickListener(new OnClickListener() {
33 @Override 34 public void onClick(View v) {
35 String number = phoneNumEditText.getText().toString(); 36 if (number == null || number.equals("")) {
37 postTip("请输入电话号码!"); 38 } else if (!checkPhone(number)) {
39 postTip("请输入正确的电话号码!"); 40 } else {
41 Intent intent = new Intent(Intent.ACTION_DIAL, Uri 42 .parse("tel:" + number)); 43 startActivity(intent); 44 finish(); 45 } 46 } 47 }); 48 } 49 50 private void postTip(final String message) {
51 mHandler.post(new Runnable() {
52 @Override 53 public void run() {
54 Toast toast = Toast.makeText(HomeActivity.this, message, 55 Toast.LENGTH_LONG); 56 toast.setGravity(Gravity.TOP | Gravity.CENTER, 0, 50); 57 toast.show(); 58 } 59 }); 60 } 61 62 public boolean checkPhone(String phone) {
63 Pattern pattern = Pattern 64 .compile("^[1]([3][0-9]{1}|59|58|88|89)[0-9]{8}$"); 65 Matcher matcher = pattern.matcher(phone); 66 if (matcher.matches()) {
67 return true; 68 } 69 return false; 70 } 71 }

  上面的代码主要是对用户的输入进行判断,这里限制必须是11位的电话号码,大家可以根据自己的想法更改。注意哦,这里需要添加调用拨号程序的权限

 <uses-permission android:name="android.permission.CALL_PRIVILEGED" />,我这边使用的是CALL_PRIVILEGED,你也可以使用CALL_PHONE,它会直接拨号,我觉得不太友好,而上一个是调用拨号键盘。下面是Mainifest文件

1 
2
6 7
8 9
12
17
18
19 20
21
22
23
26
27 28
29
30 31

  这个标签android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"标明使用全屏模式。

  好了,下面来测试你的程序吧,如果有真机可以直接发布到机子上,如果没有就只有创建模拟器了,由于模拟器创建起来太慢,我就偷个懒不再叙述如何在模拟器中发布了,大家可以参考这个文章:。好了,咱们下次再续。

  

转载于:https://www.cnblogs.com/walter-liu/archive/2012/02/23/2364429.html

你可能感兴趣的文章
SQL 单引号转义
查看>>
start
查看>>
实现手机扫描二维码页面登录,类似web微信-第三篇,手机客户端
查看>>
PHP socket客户端长连接
查看>>
7、shell函数
查看>>
【转】Apache Jmeter发送post请求
查看>>
Nginx 基本 安装..
查看>>
【凸优化】保留凸性的几个方式(交集、仿射变换、投影、线性分式变换)
查看>>
NYOJ-613//HDU-1176-免费馅饼,数字三角形的兄弟~~
查看>>
TFS --- GrantBackup Plan Permissions Error
查看>>
傅里叶级数与积分方程
查看>>
软工作业3:用户体验分析——以“南通大学教务管理系统微信公众号”为例
查看>>
Css:背景色透明,内容不透明之终极方法!兼容所有浏览器
查看>>
我们前端跟后端是怎么合作的
查看>>
mysql存储过程
查看>>
洛谷P2556 [AHOI2002] 黑白图像压缩 [模拟]
查看>>
letecode [136] - Single Number
查看>>
linux下设置固定IP的方法
查看>>
VMware虚拟机下Linux系统的全屏显示
查看>>
net core体系-web应用程序-4asp.net core2.0 项目实战(任务管理系统)-2项目搭建
查看>>