Android入门

开发工具

  • Eclipse + ADT(Android Developer Tools)
  • Android Studio
  • SDK (软件开发环境, Android调试工具, 模拟等)

SDK目录

  • add-ons (额外开发资料, google地图资源)
  • build-tools : 编译工具目录
  • docs : 离线版开发文档
  • extras : 向下兼容的jar包, intel工具
  • platforms : Android开发版本平台jar包
  • platform-tools : 平台开发工具(adb)
  • sources : 开发平台源码
  • system-images : 模拟器镜像文件
  • tools : 开发者常用工具

Android 屏幕分辨率

  • VGA: 480 x 640 标准大小
  • HVGA: 320 x 480 一半大小
  • QVGA: 240 x 320 四分之一
  • WVGA: 480 x 800
  • FWVGA: 480 x 854

开发工具

ADB (Android debug bridge) Android调试桥

  • adb devices 查看当前已连接的设备
  • adb start-server 开启 adb 服务
  • adb kill-server 杀死 adb 服务
  • adb shell 进入Android控制台(执行Linux命令)exit退出
  • adb logcat 打印日志信息
  • adb install xxx.apk : 安装应用
  • adb uninstall 包名 : 根据包名卸载应用
  • adb push hiahia.txt /sdcard/hiahia.txt : 上传文件
  • adb pull /sdcard/hiahia.txt . : 下拉文件
  • adb -s emulator-5554 :指定设备

  • adb可能因为360, 金山卫士, 腾讯QQ影响无法使用

  • 端口5037被占用
  • netstat -ano | find "5037" 查看谁占用端口
  • 杀掉进程kill pid

如何在手机上运行Android项目

  1. 买根数据线
  2. 插上电脑
  3. 装驱动(驱动精灵,驱动人生,应用宝,360手机卫士)
  4. 开启usb调试模式

R文件报错处理:

  1. 不能以关键字命名
  2. 资源不能以数字开头
  3. 布局文件内部有错误, 有小红叉

点击事件的4种写法

  1. 定义一个内部类实现OnClickListener接口
  2. 使用匿名内部类对象实现
  3. 使用当前类,继承接口
  4. 定义xml属性
    • 定义xml的属性android:onClick="call"
    • 在代码里写方法 public void call(View view){}

短信发送器

  1. 拿到联系人电话号码
  2. 群发短信

写一个Android项目

  1. 创建一个Android Project
  2. 写UI界面布局.
  3. 根据业务逻辑写Java代码.

Android常见布局

  • LinearLayout 线性布局

    • 控件一个接一个排列
  • RelativeLayout 相对布局

    • 控件之间以相对位置排列
  • FrameLayout 帧布局

    • 一层盖一层
  • AbsoluteLayout 绝对布局

    • 通过x, y指定绝对位置.
  • TableLayout 表格布局

    • 类似Html表格

Android的颜色模式

RGB (Red, Green, Blue) #FF0000

点击事件的几种写法

  • 内部类实现OnClickListener接口
  • 让当前的activity实现OnClickListener接口
  • 匿名内部类
  • 定义onclick的属性,绑定点击的方法名

举个栗子:

  1 package cn.message;
  2 import android.app.Activity;
  3 import android.os.Bundle;
  4 import android.telephony.SmsManager;
  5 import android.view.View;
  6 import android.view.View.OnClickListener;
  7 import android.widget.Button;
  8 import android.widget.EditText;
  9 import android.widget.Toast;
 10 //让当前的Activity实现OnClickListener接口
 11 public class MainActivity extends Activity implements OnClickListener {
 12     EditText phonenumber = null;
 13     EditText messages = null;
 14     @Override
 15     protected void onCreate(Bundle savedInstanceState) {
 16         super.onCreate(savedInstanceState);
 17         setContentView(R.layout.activity_main);
 18         // 获取界面上的文本输入框
 19         phonenumber = (EditText) findViewById(R.id.phonenum);
 20         messages = (EditText) findViewById(R.id.message);
 21         
 22         // 获取界面上的按钮
 23         Button send_btn = (Button) findViewById(R.id.send);
 24         Button send_btn2 = (Button) findViewById(R.id.send2);
 25         Button send_btn3 = (Button) findViewById(R.id.send3);
 26         //第四个按钮是重置按钮,用于重置已输入的内容,
 27         //已在在布局文件定义 android:onClick="resrt"
 28         
 29         /*
 30          * 方法一:让当前的Activity实现OnClickListener接口,然后重写点击事件方法
 31          */
 32         send_btn3.setOnClickListener(this);
 33         
 34         /*
 35          * 方法二:匿名内部类方法的点击事件
 36          */
 37         send_btn.setOnClickListener(new OnClickListener() {
 38             @Override
 39             public void onClick(View v) {
 40                 String num = phonenumber.getText().toString().trim();
 41                 String mess = messages.getText().toString();
 42                 // 判断取得的手机号和信息是否为空
 43                 isPass(num, mess);
 44             }
 45         });
 46         
 47         /*
 48          * 方法三:自定义内部类实现OnClickListener接口
 49          */
 50         send_btn2.setOnClickListener(new MyOnClickListener());
 51     }
 52     private class MyOnClickListener implements OnClickListener {
 53         @Override
 54         public void onClick(View v) {
 55             // TODO Auto-generated method stub
 56             String num = phonenumber.getText().toString().trim();
 57             String mess = messages.getText().toString();
 58             // 判断取得的手机号和信息是否为空
 59             isPass(num, mess);
 60         }
 61     }
 62     // 让当前的Activity实现OnClickListener接口,然后重写的点击事件方法
 63     @Override
 64     public void onClick(View v) {
 65         // TODO Auto-generated method stub
 66         switch (v.getId()) {
 67         case R.id.send3:
 68             String num = phonenumber.getText().toString().trim();
 69             String mess = messages.getText().toString();
 70             // 判断取得的手机号和信息是否为空
 71             isPass(num, mess);
 72             break;
 73         default:
 74             break;
 75         }
 76     }
 77     /*
 78      * 方法四:在布局文件定义 android:onClick="resrt"
 79      */
 80     public void reset(View v) {
 81         //清空输入框
 82         phonenumber.setText("");
 83         messages.setText("");
 84     }
 85     /**
 86      * 方法,通过判断传过来的手机号和短信号码是否为空来确定是否发送短信
 87      * 
 88      * @param num
 89      *            手机号
 90      * @param mess
 91      *            短信内容
 92      */
 93     public void isPass(String num, String mess) {
 94         // TODO Auto-generated method stub
 95         if (!(num.equals("") || mess.equals(""))) {
 96             // 获取系统默认的短信管理器实例
 97             SmsManager sms = SmsManager.getDefault();
 98             sms.sendTextMessage(phonenumber.getText().toString(), null,
 99                     messages.getText().toString(), null, null);
100             // 发送成功,重置手机号、信息输入框内容
101             phonenumber.setText("");
102             messages.setText("");
103             // 提示发送成功
104             Toast.makeText(MainActivity.this, "发送成功!", Toast.LENGTH_SHORT)
105                     .show();
106         } else {
107             // 提示发送失败
108             Toast.makeText(MainActivity.this, "手机号或短信内容不能为空!",
109                     Toast.LENGTH_SHORT).show();
110         }
111     }
112 }
 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:paddingBottom="@dimen/activity_vertical_margin"
 6     android:paddingLeft="@dimen/activity_horizontal_margin"
 7     android:paddingRight="@dimen/activity_horizontal_margin"
 8     android:paddingTop="@dimen/activity_vertical_margin"
 9     tools:context=".MainActivity" >
10     <TextView
11         android:id="@+id/textView1"
12         android:layout_width="wrap_content"
13         android:layout_height="wrap_content"
14         android:layout_alignParentLeft="true"
15         android:text="@string/phone_s" />
16     <EditText
17         android:id="@+id/phonenum"
18         android:layout_width="wrap_content"
19         android:layout_height="wrap_content"
20         android:layout_alignLeft="@+id/textView1"
21         android:layout_below="@+id/textView1"
22         android:layout_marginTop="14dp"
23         android:ems="10"
24         android:inputType="phone" >
25         <requestFocus />
26     </EditText>
27     <TextView
28         android:id="@+id/textView2"
29         android:layout_width="wrap_content"
30         android:layout_height="wrap_content"
31         android:layout_alignLeft="@+id/phonenum"
32         android:layout_below="@+id/phonenum"
33         android:layout_marginTop="22dp"
34         android:text="@string/message_s" />
35     <EditText
36         android:id="@+id/message"
37         android:layout_width="wrap_content"
38         android:layout_height="100dp"
39         android:layout_alignLeft="@+id/textView2"
40         android:layout_below="@+id/textView2"
41         android:layout_marginTop="33dp"
42         android:ems="10"
43         android:inputType="textMultiLine" />
44     <Button
45         android:id="@+id/reset_b"
46         android:layout_width="wrap_content"
47         android:layout_height="wrap_content"
48         android:layout_below="@+id/message"
49         android:layout_toRightOf="@+id/textView1"
50         android:onClick="reset"
51         android:text="@string/reset_b" />
52     <Button
53         android:id="@+id/send2"
54         android:layout_width="wrap_content"
55         android:layout_height="wrap_content"
56         android:layout_below="@+id/reset_b"
57         android:layout_marginTop="20dp"
58         android:layout_toRightOf="@+id/textView1"
59         android:text="@string/send_b2" />
60     <Button
61         android:id="@+id/send3"
62         android:layout_width="wrap_content"
63         android:layout_height="wrap_content"
64         android:layout_alignBaseline="@+id/send2"
65         android:layout_alignBottom="@+id/send2"
66         android:layout_alignLeft="@+id/send"
67         android:text="@string/send_b3" />
68     <Button
69         android:id="@+id/send"
70         android:layout_width="wrap_content"
71         android:layout_height="wrap_content"
72         android:layout_above="@+id/send2"
73         android:layout_alignRight="@+id/message"
74         android:text="@string/send_b" />
75 </RelativeLayout>

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。