当前位置:文档之家› 安卓初级开发文档

安卓初级开发文档

1

安卓笔记

by@小羽·深圳

目录

(1)

布局 .......................................................................................................................................................... 2 LinearLayout 线性布局(控件在一条线上) ...................................................................................... 2 相对布局RelativeLayout (2)

控件 (2)

编辑框 (3)

单选框 (3)

按钮: (3)

开关按钮 (4)

AnalogClock & DigitalClock (4)

Chronometer 计时器,继承自TextView (4)

ImageView (5)

ListView()重要 (5)

datapicker(日期选择器) (6)

进度条 (7)

选项卡 (8)

SQLite 事务 (10)

数据库操作: (10)

对话框 (11)

ImageSwitcher (14)

Menu (15)

Notification (17)

告诉系统我这个activity 是应用程序的入口.

跳转:

Intent intent = new Intent(MainActivity.this,DialogActivity.class);

startActivity(intent);

2

布局

LinearLayout 线性布局(控件在一条线上)

在当前布局容器内的组件以线条的形式排列,跟 swing 的FlowLayout 类似。不同的是,LinearLayout 不换行的。

超出边界,不显示。

Xml 属性 Android:orientation 表示线条的方向 可选值vertical 垂直 horizontal 水平

android:orientation ="vertical" Android:gravity 表示对齐方式 可选值 top bottom left right 可以多选 android:gravity ="right"

Weight 占几分之几

android:id ="@+id/imageView1"

android:layout_width ="wrap_content"

android:layout_height ="wrap_content"

android:layout_alignLeft ="@+id/button1"

android:layout_below ="@+id/button1"

android:layout_marginLeft ="20dp" android:layout_marginTop ="73dp"

android:src ="@android:drawable/sym_action_call" />

相对布局RelativeLayout

控件相对于控件的位置

3.帧布局FrameLayout(相当于DIV)播放器

4.绝对布局 absolutely

5.表格布局tablelayout

行数据

控件

TextView

3

xml:

链接:android:autoLink="all";

编辑框

android:id ="@+id/name"

android:layout_width ="match_parent"

android:layout_height ="wrap_content"

android:layout_weight ="1"

android:hint ="请输入用户名"

android:maxLines ="9" >

单选框

android:id ="@+id/radioGroup1"

android:orientation ="horizontal"

android:layout_width ="wrap_content"

android:layout_height ="wrap_content" >

android:id ="@+id/radio1"

android:layout_width ="wrap_content"

android:layout_height ="wrap_content"

android:text ="男" />

android:id ="@+id/radio2"

android:layout_width ="wrap_content"

android:layout_height ="wrap_content"

android:text ="女" />

radio2.setOnCheckedChangeListener(listener)

按钮:

4

android:layout_width ="wrap_content"

android:layout_height ="wrap_content"

android:layout_alignLeft ="@+id/textView1"

android:layout_below ="@+id/textView1"

android:layout_marginTop ="21dp"

android:text ="点击我" />

xml 中点击事件的定义:android:onClick ="getReadbleDB"

bt_save .setOnClickListener(this );

多选框

Checkbox

bt_save .setOnClickedChangeListener(new OnCheckedListener());

public void oncheckedchange

开关按钮

android:id ="@+id/toggleButton1"

android:layout_width ="wrap_content"

android:layout_height ="wrap_content"

android:textOn ="开"

android:textOff ="关" android:text ="ToggleButton" />

setOnCheckedChangeListener(CompoundButton.OnCheckedChangeListener(){

@Override

Public void onOnCheckedChanged(CompoundButton btn,Boolean isChecked ){

}

});

Anal ogCl ock & DigitalCl ock

AnalogClock 图形时钟,继承自View

DigitalClock 文字时钟,继承自TextView

Chronometer 计时器,继承自TextView

5

Xml 属性:

Android:format 计时器的格式

方法:

Start() 启动计时器

Stop() 关闭计时器

setBase(long) 设置计时器的起点

setOnChronometerTickListener(Chronometer.OnChronometerTickListener({

@Overrid

Public void onChronometerTick(Chronometer chronometer){}

}));

ImageView

继承自View

Xml 属性:

Android:src 图片源

Android:scaleType: 缩放策略

取值范围:

Matrix,fitXY,fitStart,fitCenter,fitEnd,center,centerCrop,centerInside

Api:

ImageView.setAlpha(int)0—255 设置图片透明度

ImageView.setImageResource(int id) 设置图片源

Bitmap.createBitmap(Bitmap,int x,int y,int width,int height)

ListView()重要

lv.setAdapter(new MyAdapter)

private class MyAdapter extends BaseAdapter{

public int getCount(){ //有多少列

return 5;

}

getView()//返回每个条目对应的view 对象

public View getView(int position, View convertView, ViewGroup parent) {

//问题: getView 的方法被调用了多少次?

// 界面上能显示多个条目 ,这个方法就会被调用多少次.

System.out.println("getview" + position);

if(position == 0){//第一个位置

6

TextView tv = new TextView(DemoActivity.this);

tv.setText("我是第0个条目");

return tv;

}else if(position == 1){//第二个位置

ImageView iv = new ImageView(DemoActivity.this);

iv.setImageResource(R.drawable.ic_launcher);

return iv;

}else {

TextView tv = new TextView(DemoActivity.this);

/**

* 方法2 采用view 对象的tag 存放一些我们想传递的数据

*/

tv.setTag("新闻的url 为"+ position);

tv.setTextSize(30);

tv.setTextColor(Color.RED);

tv.setText("我是第"+position+"个条目");

return tv;

}

}

}

datapicker(日期选择器)

android:id ="@+id/dp"

android:layout_width ="wrap_content"

android:layout_height ="wrap_content" />

dp .init(c .get(Calendar.YEAR ), c .get(Calendar.MONTH ),

c .get(Calendar.DAY_OF_MONTH ), new OnDateChangedListener() { @Override

public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {

tv1.setText("您所选择的日期是:" + year + "年" + (monthOfYear

7

+ 1) + "月"

+ dayOfMonth + "日");

} });

------------------timepicker -------------------------------------------

android:id ="@+id/tp"

android:layout_width ="wrap_content"

android:layout_height ="wrap_content" />

tp .setOnTimeChangedListener(new OnTimeChangedListener() {

@Override

public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {

tv1.setText("您所选择的时间是:"+hourOfDay+"点"+minute+"分"); }

});

进度条

1. ProgressBar

进度条,继承自View

Xml 属性:

Android:max 进度条最大值

Android:progress 进度条当前值

Android:progressDrawable 进度条的图片

Style 进度条的样式

注:style 的取值范围有:

@android:style/Widget.ProgressBar.Horizontal 水平进度条

@android:style/Widget.ProgressBar.Inverse

@android:style/https://www.doczj.com/doc/b913829894.html,rge

@android:style/https://www.doczj.com/doc/b913829894.html,rge.Inverse

@android:style/Widget.ProgressBar.Small

@android:style/Widget.ProgressBar.Small.Inverse

API:

progressBar.incrementProgressBy(int) 增加进度

8

progressBar.setProgress(int) 设置进度

在标题上显示进度条

a. 显示带刻度的进度条

在Activity 调用setContentView()之前,调用requestWindowFeature (Window.FEATURE_PROGRESS )

在Activity 调用setContentView 之后,调用setProgressBarVisibility(true)

b. 显示不带刻度的进度条

在Activity 调用setContentView()之前,调用requestWindowFeature (Window.FEATURE_INDETERMINATE_PROGRESS )

在Activity 调用setContentView 之后,调用setProgressBarIndeterminateVisibility(true)

内容提供者:

把一个应用程序私有的数据给其他程序使用

内容提供者根据一个路径把数据暴露出来 content://(包名)/ uri:统一资源定位符

url:统一资源标识符

使用方法:

1、创建一个类继承extends ContentProvider

2、在清单文件中配置

选项卡

1/编写TabHostxml

2、extends TabActivity

TabHost tabhost = this.getTabHost();

LayoutInflater li = get LayoutInflater();

li.inflate(R.id.main,tabhost.getTabContentView());

TabSpec tab1 = tabhost.newTabHost("tab1");

tab1.setContent(R.id.tab1)

tab1.indicate("tab11")

tabhost.addTab(tab1)

btn = (Button)tabhost.findViewById(R.id.btn);

--------------------------listView ----------------------------

9

private int [] icons = { R.drawable.ic_menu_allfriends ,

R.drawable.ic_menu_always_landscape_portrait ,

R.drawable.ic_menu_archive , R.drawable.ic_menu_attachment ,

R.drawable.ic_menu_back };

private String[] names = { "我的好友",

"屏幕旋转",

"打开文件夹", "添加附件", "后退按钮" };

!!!!!!!!!BaseAdapter!!!!!!!!!!!!!!!

inflater = (LayoutInflater) getSystemService(https://www.doczj.com/doc/b913829894.html,YOUT_INFLATER_SERVICE );

lv .setAdapter(new MyAdapter());

lv .setOnItemClickListener(new OnItemClickListener() {

@Override

public void onItemClick(AdapterView parent, View view,

int position, long id) {

String name = (String) lv .getItemAtPosition(position);

Toast.makeText (DemoActivity.this , name, 0).show();

}

});

private class MyAdapter extends BaseAdapter {}

!!!!!!!!!!!!! ArrayAdapter!!!!!!!!!!!!!!!!!!!!!!!!

public void onCreate(Bundle savedInstanceState) {

super .onCreate(savedInstanceState);

setContentView(https://www.doczj.com/doc/b913829894.html,yout.main );

lv = (ListView) findViewById(R.id.lv );

// 初始化 系统布局填充器的服务

inflater = (LayoutInflater)

getSystemService(https://www.doczj.com/doc/b913829894.html,YOUT_INFLATER_SERVICE );

lv .setAdapter(new ArrayAdapter(this , https://www.doczj.com/doc/b913829894.html,yout.item , https://www.doczj.com/doc/b913829894.html, , names ));

}

!!!!!!!!!!!! SimpleAdapter!!!!!!!!!!!!!!!!!

10

public void onCreate(Bundle savedInstanceState) {

super .onCreate(savedInstanceState);

setContentView(https://www.doczj.com/doc/b913829894.html,yout.main );

lv = (ListView) findViewById(R.id.lv );

// 初始化 系统布局填充器的服务

inflater = (LayoutInflater)

getSystemService(https://www.doczj.com/doc/b913829894.html,YOUT_INFLATER_SERVICE );

List> data = new ArrayList>(); Map map1 = new HashMap();

map1.put("icon", icons [0]);

map1.put("name", names [0]);

data.add(map1);

Map map2 = new HashMap();

map2.put("icon", icons [2]);

map2.put("name", names [2]);

data.add(map2);

lv .setAdapter(new SimpleAdapter(this , data, https://www.doczj.com/doc/b913829894.html,yout.item , new String[]{"icon","name"}, new int []{R.id.iv ,https://www.doczj.com/doc/b913829894.html, }));

}

--安卓网络编程------------------------

SQLite 事务

数据库操作:

---------------------------------------------------------

public class PersonDBOpenHelper extends SQLiteOpenHelper {

public PersonDBOpenHelper(Context context) {

super (context, "Person.db", null , 2);

}

@Override

public void onCreate(SQLiteDatabase db) {

db.execSQL("create table person (id integer primary key autoincrement ,name varchar(20), number varchar(20))");

}

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { //在更新数据库表结构的时候执行,添加一列账户

System.out.println("onUpgrade");

db.execSQL("alter table person add account varchar(20)");

}

-----------------------------------------------------------------------

增删查改:

11

对话框

1.AlertDialog.Builder builder = new Builder(MainActivity.this);

//2.设置dialog的属性icon message

builder.setIcon(R.drawable.ic_launcher);

builder.setTitle("title test..");

builder.setMessage("dialog test...");

builder.setPositiveButton("取消", new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

Log.e("msg","取消被点击");

}

});

builder.setNegativeButton("确定", new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

Log.e("msg","确定被点击");

}

});

//3.builder对象create()创建Dialog

AlertDialog dialog = builder.create();

//4.dialog.show();

dialog.show();

12 ----------------------------------------listDialog------------------------------

class MyOnClickListener implements View.OnClickListener{

private int type;

public MyOnClickListener(int type){

this.type = type;

}

@Override

public void onClick(View v) {

AlertDialog.Builder builder = new Builder(MainActivity.this);

builder.setIcon(R.drawable.ic_launcher);

if(type == 1){

builder.setTitle("listItem choice");

builder.setItems(strs, new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

Log.e("msg", "listItem...choice..." + strs[which]);

}

});

}else if(type == 2){

builder.setTitle("multiChoice");

builder.setMultiChoiceItems(strs,flags,new

DialogInterface.OnMultiChoiceClickListener() {

@Override

public void onClick(DialogInterface dialog, int which, boolean isChecked) { Log.e("msg","multichoice");

}

});

builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

StringBuffer buffer = new StringBuffer();

for(int i = 0; i < flags.length; i++){

if(flags[i]){

buffer.append(strs[i]+",");

}

13

}

Log.e("checkedItems",buffer.toString());

}

});

}else if(type == 3){

builder.setTitle("singleChoice");

builder.setSingleChoiceItems(strs, choice, new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

choice = which;

}

});

builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

Log.e("singlechoice..",strs[choice]);

}

});

}

AlertDialog dialog = builder.create();

dialog.show(); }

--------------------------- AlertDialog dialog;--------------------------------------------

private AlertDialog dialog;

protected Dialog onCreateDialog(int id) {

AlertDialog.Builder builder = new Builder(MainActivity.this);

builder.setIcon(R.drawable.ic_launcher);

builder.setTitle("title test..");

builder.setMessage("dialog test...");

builder.setNegativeButton("确定", new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

Log.e("msg", "确定被点击");

}

});

AlertDialog dialog = builder.create();

14

return dialog;

}

dialog.dismiss()/dialog.cancle();

ImageSwitcher

int [] imgs = {R.drawable.a1,R.drawable.a2,R.drawable.aa};

this.imgSwitcher = (ImageSwitcher)findViewById(R.id.imgSwitcher);

this.imgSwitcher.setInAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_in)); this.imgSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_out)); this.imgSwitcher.setFactory(new ViewFactory() {

@Override

public View makeView() {

return new ImageView(MainActivity.this);

}

});

this.imgSwitcher.setImageResource(imgs[index]);

------------------------------------------翻页---------------------------------------

pro.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

index--;

if(index < 0){

index = imgs.length - 1;

}

imgSwitcher.setImageResource(imgs[index]);

}

});

next.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

index++;

15

if(index >= imgs.length){

index = 0;

}

imgSwitcher.setImageResource(imgs[index]);

}

});

Menu

public static final int ITEM0 = Menu.FIRST ;

public static final int ITEM1 = Menu.FIRST + 1;

public boolean onCreateOptionsMenu(Menu menu) {

super .onCreateOptionsMenu(menu);

menu.add(0,ITEM0,0,"按钮一");

menu.add(0,ITEM1,0,"按钮二");

menu.findItem(ITEM1);

return true ;

}

public boolean onOptionsItemSelected(MenuItem item){

switch (item.getItemId()){

case ITEM0:

actionClickMenuItem1();

break ;

case ITEM1:

actionClickMenuItem2();

break ;

}

return true ;

}

private void actionClickMenuItem1() {

// TODO Auto-generated method stub

setTitle("按钮一可见");

btn1.setVisibility(View.VISIBLE );

btn2.setVisibility(View.INVISIBLE );

}

private void actionClickMenuItem2() {

// TODO Auto-generated method stub

setTitle("按钮2 可见");

btn1.setVisibility(View.INVISIBLE );

16

btn2.setVisibility(View.VISIBLE );

} -----------------------------------SubMenu -------------------------------

--

public boolean onCreateOptionsMenu(Menu menu) {

//添加多重子菜单

/*

* add()添加子菜单选项.不能再添加子菜单选项

* addSubMenu()得到一个子菜单选项。子菜单选项,可以添加下一级子菜单

*/

SubMenu submenu = menu.addSubMenu("颜色选择");//一级

menu.add(0,1,0,"退出");

//第一个参数:一级菜单的组//第二个参数:二级菜单的ItemId

//第三个参数:在二级菜单组出现的顺序//第四个参数:二级菜单显示的文本

submenu.add(1,11,1,"红色");//二级

submenu.add(1,12,3,"绿色");

submenu.add(1,13,2,"蓝色");

SubMenu sub2 = submenu.addSubMenu("其他颜色");//三级

sub2.add(2,14,1,"黑色");

sub2.add(2,15,2,"紫色");

return true ;

}

为二级菜单的ITEM 添加动作

public boolean onOptionsItemSelected(MenuItem item) {

int id = item.getItemId();

switch (id){

case 1:finish();break ;

case 11:txt .setTextColor(Color.RED );break ;

case 12:txt .setTextColor(Color.GREEN );break ;

case 13:txt .setTextColor(Color.BLUE );break ;

case 14:txt .setTextColor(Color.BLACK );break ;

case 15:txt .setTextColor(Color.YELLOW );break ;

}

return super .onOptionsItemSelected(item);

}

17

-----------------------------ContextMenu---------------------------------

registerForContextMenu(txt);

registerForContextMenu(txt2);

public void onCreateContextMenu(ContextMenu menu, View v,

ContextMenuInfo menuInfo) {

MenuItem item = menu.add("删除");

menu.add("复制");

final View v2 = v;

item.setOnMenuItemClickListener(new OnMenuItemClickListener() {

@Override

public boolean onMenuItemClick(MenuItem item) {

content.removeView(v2);

return false;

}

});

}

Notification

private NotificationManager m;

//1.通过NotificationManger 来管理Activity 中的信息

m = (NotificationManager) getSystemService(NOTIFICATION_SERVICE );

//2.设置状态栏上的属性

Notification notification = new Notification(R.drawable.ic_launcher ,"所需要显示的文本

",System.currentTimeMillis ());

//3.setDefault();有消息弹出的时候有铃声和振动

notification.defaults = Notification.DEFAULT_ALL ;

//4.设置下来后点击的链接

PendingIntent contentIntent =

PendingIntent.getActivity (MainActivity.this , 0,

new Intent(MainActivity.this ,OtherActivity.class ) , PendingIntent.FLAG_ONE_SHOT );

//5.下拉后的内容

notification.setLatestEventInfo(MainActivity.this , "get a notification", "notification details....", contentIntent);

18

//6.利用管理器将notification 显示出来

m .notify(123456, notification);

在链接的界面中设置点击后,状态信息消失

mNotificationManager.cancel(123456);

//3.设置notification 的具体的参数

n otification.flags = Notification.FLAG_AUTO_CANCEL; //标示当前的notification 被清除掉 FLAG_NO_CLEAR

// notification.sound 指定notification 的声音,接收的事URI 类型

// notification.vibrate long[]{200,100,200} //振动先振动200ms-100ms-200ms n otification.icon = R.drawable.notification;

I ntent intent = new Intent(this,DemoActivity.class);

P endingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

n otification.setLatestEventInfo(this, "我是正文的标题", "我是具体的内容", contentIntent);

设置启动模式(在配置文件中的activity 里)

android:launchMode="singleTop"

事件处理与监听

内部类

btn.setOnClickListener(new MyListener());

class MyListener implements View.OnClickListener{

public void onClick(View v) {

Toast.makeText (MainActivity.this , "My.listener",

Toast.LENGTH_LONG ).show();

}

}

匿名内部类

btn .setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

Toast.makeText (MainActivity.this , "listener",

Toast.LENGTH_LONG ).show();

}

});

19

外部类

btn.setOnClickListener(new MyListener2(this));

public class MyListener2 implements OnClickListener {

private Context context;

public MyListener2(Context context){

this.context = context;

}

@Override

public void onClick(View v) {

Toast.makeText(context, "listener", Toast.LENGTH_LONG).show();

}

}

implements View.OnClickListener

public void onClick(View v) {

Toast.makeText (MainActivity.this , "Activity...listener", Toast.LENGTH_LONG ).show();

}

按钮定义

android:onClick="doit"

public boolean doit(View v){

Toast.makeText(MainActivity.this, "doit...listener", Toast.LENGTH_LONG).show(); return true;

}

多媒体播放

mediaPlayer

20

存储--

手势--

private Gesture

Gesture

onToucherEVent

图片浏览器

xml:

ViewFlipper

src:

private ViewFlipper vf ;

vf = ........fineview``

vf.addView();

vf.showNext();//下一个

vf.showPrevious();//上一个

File file = Environment.getExternalStorageDirectory ();

File[] files = file.listFiles();

for (File f : files) {

if (f.isFile() && f.getName().endsWith("jpg")) {

ImageView iv = new ImageView(DemoActivity.this );

iv.setImageURI(Uri.fromFile (f));

vf.addView(iv);

手势

private GestureDetector mGestureDetector;

mGestureDetector = new GestureDetector(

new GestureDetector.SimpleOnGestureListener() {

// 手指在屏幕上滑动的时候 调用的方法.

// e1 手指第一次接触到屏幕的时候 对应的事件

// e2 手指离开屏幕的时候 对应的事件

// velocityx 水平方向的移动速度

@Override

public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {

if (Math.abs (e1.getY() - e2.getY()) > 100) { System.out .println("垂直方向移动过大");

相关主题
文本预览
相关文档 最新文档