1 环境搭建
工具
https://pan.baidu.com/s/1hnYlCHKNrVY8B3aks3yYog
提取码:5pri
本教程参考了比较老的视频教程,学习原理没有必要追求最新的工具
android studio环境搭建
直接下一步,代理推荐使用本地VPN工具,gradle构建时亦会弹出选择即可
eclipse环境搭建
不推荐,eclipse已退出历史舞台
- 安装jdk
- 安装eclipse
- 安装installer_r17-windows.exe
- 修改环境变量
Android SDK中的tools绝对路径添加到系统PATH中 - 修改hosts
c:\windows\system32\drivers\etc\HOSTS
文件末尾添加:
74.125.237.1 dl-ssl.google.com
- 安装adt
help -> install New SoftWare... -> 点击add
点击Archives... 选择adt zip文件 名称随便填
勾选Contract all... -> 点下一步直到完成 - 安装模拟器
sdk-64位.rar解压到installer_r17-windows.exe 安装的目录android-sdk中,重复的替换
启动SDK Manager.exe
配置镜像: tools -> options
server: mirrors.neusoft.edu.cn
port: 80
勾选force...
注意当前4.3之前的模拟器已被删除,故选择4.3版本 - 启动eclipse
window -> preferences -> android
选择sdk目录位置
新建android项目,启动后可以看到模拟器输出hello world
注意,这里sdk下载页空白,配置国内镜像亦未能解决,TODO
2 框架介绍
src java代码
assets 资源目录
res 图片\布局文件\字符串\菜单等
bin 输出文件夹,如apk文件
project.properties 工程属性配置
gen 系统自动生成的源代码目录
R.java 是系统自动生成的文件,重要.默认有attr,drawable,layout,string4个静态内部类.
拖动一图片到res/drawable-hdpi,可以看到R.java drawable多了一个属性;
values/strings.xml新建一个字符串
<string name="button">提交按钮</string>
可以看到R.java string多了一个属性button
清单文件介绍
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<!--
package 包名
versionCode apk版本号,1开始2\3\4不断升级
android:installLocation="auto" 自动寻找安装位置
versionName 版本名称
internalOnly 仅安装在ROM上
preferExternal 直接安装在sdcard中
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.hello"
android:versionCode="1"
android:versionName="1.0" >
<!-- sdk版本号 -->
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" />
<!-- 用户授权 访问网络等 -->
<uses-permission />
<!--
icon 应用程序logo
label 应用工程文字说明
-->
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<!--
android:name 主程序名称
intent-filter 意图过滤器,过滤用户的动作
android.intent.action.MAIN 表示当前程序是整个程序的入口程序
category android:name 表示决定应用程序是否在程序列表中显示
-->
<activity
android:name="com.example.hello.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
3 生命周期
Activity
布满整个窗口后者悬浮的操作界面,清单文件配置主Activity
栈,先进后出
7个方法
onCreate\onStart\onRestart\onResume\onPause\onStop\onDestroy
4 全局变量传递
使用全局静态变量
TextView接收变量
<!--res/layout/other.xml-->
<TextView
android:id="@+id/msg"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</TextView>
<!--res/layout/activity_main.xml-->
<Button
android:id="@+id/button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="使用Application传递数据" />
//MainActivity.java
public class MainActivity extends Activity {
// 声明按钮
private Button button;
// 声明myApp属性,用于传递变量
private MyApp myApp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 获取按钮
button = (Button)this.findViewById(R.id.button);
// 绑定点击事件
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
myApp = (MyApp) getApplication();
// 设置变量值
myApp.setName("jack");
// 意图,页面切换
Intent intent = new Intent(MainActivity.this, OtherActivity.class);
startActivity(intent);
}
});
}
...
// OtherActivity.java
public class OtherActivity extends Activity {
// 声明myApp用于接收变量
private MyApp myApp;
// 声明TextView组件
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.other);
textView = (TextView)this.findViewById(R.id.msg);
myApp = (MyApp)getApplication();
// 接收变量,设置到textView文本
textView.setText("-app-->>" + myApp.getName());
}
// 新建MyApp类继承Application,添加name属性
public class MyApp extends Application {
private String name;
getter/setter
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
setName("张三");
}
}
<!-- AndroidManifest.xml -->
<!-- 指定android:name -->
<application
android:name=".MyApp"
...
<!-- OtherActivity注册 -->
<activity
android:name=".OtherActivity">
</activity>
</application>
使用剪切板 - 传递字符串
<!-- activity_main.xml -->
<Button
android:id="@+id/button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="使用剪切板传递数据" />
<!-- other.xml -->
<TextView
android:id="@+id/msg"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
// MainActivity.java
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button)this.findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// 从android系统中调用剪切板的服务
ClipboardManager clipboardManager = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
String name = "jack";
clipboardManager.setText(name);
Intent intent = new Intent(MainActivity.this, OtherActivity.class);
startActivity(intent);
}
});
}
// OtherActivity.java
public class OtherActivity extends Activity {
private TextView textView;
@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.other);
textView = (TextView)this.findViewById(R.id.msg);
ClipboardManager clipboardManager = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
String msgString = clipboardManager.getText().toString();
textView.setText(msgString );
}
}
使用剪切板 - 传递复杂数据(java对象)
// MyData.java
// 定义传递数据类
public class MyData implements Serializable {
private String name;
private int age;
getter/setter/constructor/toString
}
//MainActivity.java
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button)this.findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
MyData myData = new MyData("jack", 18);
// 将对象转换成字符串
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
String base64String = "";
try {
ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
objectOutputStream.writeObject(myData);
base64String = Base64.encodeToString(byteArrayOutputStream.toByteArray(), Base64.DEFAULT);
objectOutputStream.close();
ClipboardManager clipboardManager = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
clipboardManager.setText(base64String);
Intent intent = new Intent(MainActivity.this, OtherActivity.class);
startActivity(intent);
} catch(Exception e) {
}
}
});
}
//OtherActivity.java
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.other);
textView = (TextView)this.findViewById(R.id.msg);
ClipboardManager clipboardManager = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
String msgString = clipboardManager.getText().toString();
byte[] base64_byte = Base64.decode(msgString, Base64.DEFAULT);
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(base64_byte);
try {
ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream);
MyData myData = (MyData)objectInputStream.readObject();
textView.setText(myData.toString());
} catch (Exception e) {
// TODO: handle exception
}
}
网友评论