Android开发基本知识总结,Android课件
Android开发基础教程
2015-4-13周一2CJ02
目录
1.什么是Android?
2.Android应用开发环境
3.Gradle
4.模拟器Emulator
5.开发一个安卓应用程序的步骤
6.关于多个模拟器的问题
7.安卓工程文件的结构
8.android界面文件---xml文件
9.android程序文件---java文件
10.界面布局方式
11.几个常用组件
12.Roast组件
13.对话框AlertDialog
14.几条重要的语句
15.监听器Listener
16.识别响应事件的组件
17.界面切换
18.界面之间的数据传递
19.Activity生命周期
20.多媒体播放
21.日志文件在程序调试中的使用
22.使用XML文件保存数据
23.使用TXT文件保存数据
24.使用数据库保存数据
25.时间组件
26.线程Thread
27.视频播放VideoView
28.MediaPlayer,SurfaceView和SurfaceHolder播放视频
29.录制音频MediaRecorder
30.菜单组件
1.什么是Android?
移动设备(常常指手机mobile)的操作系统,由google公司出品,是免费的, 最早是基于Linux平台的;目前已经推出的Android3.0是平板电脑上的操作系统。
其它的手机操作系统有:iPhone系统等。
手机厂商:三星(Samsung,宏达电(HTC),摩托罗拉(Motorola),华硕,索尼,Garmin等都支持iPhone 系统。
Android系统功能:自定义用户界面,支持蓝牙,多点触摸,具有导航功能和语音识别功能,结合了google 地图。
Android软件开发工具SDK 4.0。
Android系统特点:虚拟键盘,以WebKit为核心的WebView组件,可以使用HTML, javascript等。
2.Android应用开发环境
Eclipse+ADT+Android SDK。
ADT---Android开发工具插件(Android Plugs for Eclipse).
开发环境安装注意事项:关闭防毒软件,按顺序安装,保持网络畅通,比较耗时。特别说明,安装和运行需要高配置机器和高速网络,比较费时。
(1)安装Java JDK。甲骨文
网站:https://www.360docs.net/doc/5a5993832.html,/technetwork/java/javase/downloads/index.html
(2)安装Eclipse IDE。
网站:https://www.360docs.net/doc/5a5993832.html,
(3)安装Android开发工具插件ADT。
网站:https://https://www.360docs.net/doc/5a5993832.html,/android/eclipse
(4)安装Android SDK。
网站:https://www.360docs.net/doc/5a5993832.html,/sdk/index.html
也可以安装Android Studio IDE。
网站:https://www.360docs.net/doc/5a5993832.html,/
3.Gradle
Gradle就是可以使用Groovy来书写构建脚本的构建系统,支持依赖管理和多项目,类似Maven,但比之简单轻便。
国内恶略的网络环境就不提了.下面说一下怎么解决, 方法一就是翻墙, 自行百度.方法二就是下载
gradle-1.6-bin.zip离线包, 下载地址https://www.360docs.net/doc/5a5993832.html,/detail/zjilvufe/...
4.模拟器Emulator
用软件模拟一部真实的手机,新建模拟器,并配置模拟器
注意问题:(1)开发版本(2)分辨率
5.开发一个安卓应用程序的步骤
新建安卓工程---输入工程名称---选择工作文件夹---安卓版本---输入安卓应用名称application name和包名---编辑程序---装入(载入)程序到模拟器中
其中, Create activity:设置为允许,即程序可以交互操作。
运行安卓程序:run as application“
保存安卓工程,打开安卓工程
切换工作区
导入安卓工程:把已经存在的安卓工程-文件拷贝到当前工作文件夹中。
6.关于多个模拟器的问题
创建多个模拟器。选择其中一个模拟器---配置模拟器。
7.安卓工程文件的结构
Src:源程序所在文件夹
Gen:存放系统自动生成的源程序文件,其中最重要的是R.java。
Android版本:存放系统开发包。
Assets:存放外部资源;
Res:有3个文件夹,
Drawable:存放图标、图片,和其它资源文件。
有3个子文件夹。
Drawable-hdpi:存放高分辨率图片
Drawable-mdpi:存放高分辨率图片
Drawable-ldpi:存放低分辨率图片
Layout:程序界面文件,即XML文件。
Values:存放参数文件,文件形式仍为XML。
界面文件和程序文件是相互独立的,
8.android界面文件---xml文件
扩展名为xml, 设计时有2种方法:可视化,直接编辑代码
9.android程序文件---java文件
SetContentView(https://www.360docs.net/doc/5a5993832.html,yout.xml文件名称); //加载界面文件
FindViewByID(R.id.组件的ID号); //由资源索引号得到资源指针
注意:在android程序中,所有组件和资源都是通过资源索引号引用的,不是资源指针;资源索引号是
层次结构;函数FindViewByID返回值的类型由组件ID决定。
如何得到页面上组件的指针?得到后,就可以操作组件的属性等。
10.界面布局方式
选择以下界面布局方式之一:
布局方式:
LinearLayout, TableLayout表格布局,FrameLayout框架布局(网格布局), AbsoluteLayout, RelativeLayout
11.几个常用组件
布局组件
TextView:
txtview.setTextSize(12);
EditText:
得到EditText edittext_obj中的文字:
String s = edittext_obj.getText().toString();
if (s.equals(“anotherstring”)){……}
Button,
CheckBox,
GridView,
************************************************************************ ImageView
常用属性:
src,
scaleType:fixXY按组件大小显示图片, centerCrop按比例显示图片超出部分裁截Gallery画廊
ListView,
ListView listview = new ListView();
String[] songs = new String[]{“***”,”***”};
ArrayAdapter
https://www.360docs.net/doc/5a5993832.html,yout.simple_list_item_1, songs); //此处第2个参数的意义?
listview.setAdapter(strlist); //在ListView中显示列表数据
private ListView.onItemClickListener lstListener = new
ListView.onItemClickListener(){
@Override
public void onItemClick(AdapterView> parent,View v, int position, long id){ // position为选择条目的序号
}
}
************************************************************************ LinearLayout:
layout.setBackgroundColor(Color.BLUE);
12.Roast组件
在button的响应事件中, 增加以下语句:
Toasttoast = Toast.makeText(FullscreenActivity.this, "这是一个对话框实例", Toast.LENGTH_LONG);
//或以下语句
//Toasttoast = Toast.makeText(getApplicationContext(), "这是一个对话框实例", Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
13.对话框AlertDialog
//常用用法
AlertDialog.Builder myalterdlg = new AlertDialog.Builder(FullscreenActivity.this);
myalterdlg.setIcon(R.drawable.ic_launcher); myalterdlg.setTitle("这里是标题");
myalterdlg.setMessage("这里是显示文字"); myalterdlg.show();
/*上面的简写:
AlertDialog.Builder myalterdlg
= new AlertDialog.Builder(FullscreenActivity.this); myalterdlg.setIcon(R.drawable.ic_launcher); myalterdlg.setTitle("这里是标题");
myalterdlg.setMessage("这里是显示文字"); myalterdlg.show();*/
/*上面的复杂用法:
AlertDialog.Builder myalterdlg
= new AlertDialog.Builder(FullscreenActivity.this) .setIcon(R.drawable.ic_launcher)
.setTitle("这里是标题")
.setMessage("这里是显示文字")
.setPositiveButton("确定", new DialogInterface.OnClickListener(){ public void onClick(DialogInterfaced f1, int i){
// 此处进行处理
}
})
.setNegativeButton("否", new DialogInterface.OnClickListener(){ public void onClick(DialogInterfaced f2, int i){
// 此处进行处理
}
})
.setNeutralButton("取消", new DialogInterface.OnClickListener(){ public void onClick(DialogInterfaced f3, int i){
// 此处进行处理
}
})
.show();*/
14.几条重要的语句
1)加载界面文件activity_fullscreen.xml:
setContentView(https://www.360docs.net/doc/5a5993832.html,yout.activity_fullscreen);
注意:加载界面文件与界面切换的区别:******
2)获得当前界面上Button组件button1的id:
button1 = (Button)findViewById(R.id.button1);
3)获得当前程序
getApplicationContext();
4)退出当前界面, 返回主界面
finish();
5)系统常量
Color.BLUE, Menu.FIRST,
6)字符串函数
String s = “11111\r\n22222\r\n33333\r\n44444\r\n55555\r\n”;
String[] resultstring;
resultstring = s.split(“\r\n”);
7)系统函数
setTitle(“这里是标题”);
8)函数
int[] songnames = new int[]{R.raw.music1, R.raw.music2, R.raw.music3};
private File path = Environment.getExternalStorageDirectory(); //得到SD卡路经
Time t = new Time();
t.setToNow(); //设置为当日。
t.hour + t.second + t.minute
ImageView.setAlpha(50):设置透明色
//疑问:File对象+ ”/myfilename.txt”这个用法正确吗?
// File.getAbsolutePath(), File. getName ()的区别?
15.监听器Listener
事件驱动,消息传递。
如何给按钮(Button)设置监听器Listener?
在布局文件xml中, 增加button组件, id为button1
在程序文件java中, 在对应位置增加以下语句:
import android.widget.*;
private Button button1;
在onCreate中, 增加以下语句:
button1 = (Button)findViewById(R.id.button1);
/*这是第1种写法
//在onCreate中, 增加:
button1.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v){
//此处处理响应事件
}
});
*/
//这是第2种写法
//在onCreate中, 增加:
button1.setOnClickListener(button1listener);
button2.setOnClickListener(button1listener);
//在类中, 增加:
private Button.OnClickListener button1listener = newButton.OnClickListener(){ @Override
public void onClick(View v){
//此处处理响应事件
};
//这是一个监听器例子
// 在java文件onCreate事件中:
checkbox1 = (CheckBox)findViewById(R.id.checkBox1);
checkbox1.setOnCheckedChangeListener(checkedChangelistener);
// 在java文件类中:
private CheckBox.OnCheckedChangeListener checkedChangelistener =
new CompoundButton.OnCheckedChangeListener(){
@Override
public void OnCheckedChanged(CompoundButton cb, boolean isChecked){ // 进行处理
}
};
16.识别响应事件的组件
输入参数:View v
程序代码如下:
case(v.getId())
{
caseR.id.btn1:
//第一个按钮的处理事件
break;
……
}
17.界面切换
界面切换语句startActivity之后的语句不再执行。
1.调用用户另一界面
Intent in = new Intent();
in.setClass(FullscreenActivity.this, SecondActivity.class);
startActivity(in);
注意:FullscreenActivity.this也可以写成:getApplicationContext()取代主程序类。
2.调用系统界面
(1)浏览网页
Uri uri = Uri.parse(“https://www.360docs.net/doc/5a5993832.html, ”);
Intent in = new Intent(Intent.ACTIN_VIEW, uri);
startActivity(in);
(2)调用系统拨号界面
Uri uri = Uri.parse(“tel:130******** ”);
Intent in = new Intent(Intent.ACTIN_DIAL, uri);
startActivity(in);
(3)调用系统拨号功能
Uri uri = Uri.parse(“tel:130******** ”);
Intent in = new Intent(Intent.ACTIN_CALL, uri);
startActivity(in);
注意:需要在AndroidManifest.xml文件中进行设置,才可以自动拨号:
18.界面之间的数据传递
1.方法1:调用无返回参数
在第一个界面中:
Bundle bundle = new Bundle();
bndle.pushString(“name”, “David”);
bndle.pushInt(“age”, 22); //pushChar, putShort,put Boolean, pushChar等等
Uri uri = Uri.parse(“https://www.360docs.net/doc/5a5993832.html, ”);
Intent in = new Intent(Intent.ACTIN_VIEW, uri);
in.putExtras(bundle);
startActivity(in);
在第二个界面中:
Intent in = this.get Intent();
Bundle bundle = in. getExtras();
String studentName = bundle.getInt(); //getDouble, getShort, getIntArray等2.方法2:调用有返回参数
例1,在第一个界面中:
private static final int ACTIVITY_EDIT = 1;
Bundle bundle = new Bundle();
bundle.pushString(“name”, “David”);
Intent in = new Intent();
in.putExtras(bundle);
in.setClass(FullscreenActivity.this, SecondActivity.class);
startActivityForResult (in, ACTIVITY_EDIT);
注意:startActivityForResult后所有语句无效,不执行;在第一个界面中,第二个界面可以在不同位置被多次调用;在第一个界面中,在其它位置可以调用其它界面。
在第一个界面中,重写onActivityResult,接收所有被调用界面返回的参数(如果有):
@Override
protected void onActivityResult(int requestCode,int resultCode,Intent data)
{
super.onActivityResult(requestCode, r esultCode, data);
if (requestCode== ACTIVITY_EDIT) //此参数可以区分不同的调用
{
Bundle bundle = data.getExtras();
if (resultCode == RESULT_OK) //此参数可以判断有无返回参数
{
Bundle bundle = data.getExtras();
……
}
if (resultCode == RESULT_CANCELED)
{ ……}
……
}
}
问题:如何判断被调用界面是否传递返回参数?如何区分返回参数是由不同的被调用界面传递的?android的这种解决方法并不是完美的。
例2,在第二个界面中:
读取第一个界面传递的参数,省略;下面是向调用程序传递返回参数:
Bundle bundle = new Bundle();
bndle.pushString(“name”, “贺昌峰373780592”);
Intent in = new Intent();
in.putExtras(bundle);
setResult(RESULT_CANCELED); //传递参数返回
// 或setResult(RESULT_OK, i n); //不传递参数返回
finish();
注意:这时,第二个界面返回到第一个界面,可以不传递参数直接返回(RESULT_CANCELED),