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
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("垂直方向移动过大");