text="TextView01"
android:
id="+id/TextView01"
android:
layout_width="wrap_content"
android:
layout_height="wrap_content"
android:
layout_x="61px"
android:
layout_y="69px">
其具体知识可以参考:
developer.android./reference/android/widget/TextView.html
在src/xxx.java中声明一个TextView
privateTextViewmTextView01;
利用findViewById()方法获取xxx.xml中的TextView
mTextView01=(TextView)findViewById(R.id.TextView01);
2.EditView的使用和TextView类似
3.Button的使用
与TextView、EditView的区别主要是:
一般为Button绑定一个监听器,操作如下
在Layout/XXX.xml中定义一个Button
②在src/xxx.java中声明一个Button
③利用findViewById()方法获取xxx.xml中的Button
写监听器代码
button_exit.setOnClickListener(newOnClickListener(){
publicvoidonClick(Viewv){
//根据实际需要写代码,注意这里采用的是匿名部类的方式
}
});
4.AlertDialog对话框的使用
newAlertDialog.Builder(XXX.this).setTitle("Android 提示") .setMessage("您确定静音登录吗?
").setPositiveButton("确定",newDialogInterface.OnClickListener(){
publicvoidonClick(DialogInterfacedialog,intwhichButton){
//TODOAuto-generatedmethodstub
根据实际需要填写代码
}
})
.setNegativeButton("取消",newDialogInterface.OnClickListener(){
publicvoidonClick(DialogInterfacedialog,intwhichButton){
//TODOAuto-generatedmethodstub
根据实际需要填写代码
}
})
.show();
5.checkBox的使用
这里省略定义、声明、获取都已经省略了,关键是写checkBox的监听器:
setOnCheckedChangeListener(newOnCheckedChangeListener(){
publicvoidonCheckedChanged(CompoundButtonarg0,booleanarg1){
//TODOAuto-generatedmethodstub
//根据实际情况书写相关代码
//这里采用的也是匿名部类的方式}
});
6.子菜单(optionsmenu)的使用
optionsmenu在屏幕底部最多只能显示6个菜单项
/**
*创建子菜单,在点击Mune时会弹出子菜单
*/
Override
publicbooleanonCreateOptionsMenu(Menumenu){
//TODOAuto-generatedmethodstub
super.onCreateOptionsMenu(menu);
menu.add(0,MENU_SETTINGS,0,"系统设置");
menu.add(0,MENU_CHANGPWD,0,"修改密码");
returntrue;
}
}
/**
*为子菜单写监听器事件
*/
Override
publicbooleanonOptionsItemSelected(MenuItemitem){
//TODOAuto-generatedmethodstub
switch(item.getItemId()){
caseMENU_SETTINGS:
//根据需要设置代码
caseMENU_CHANGPWD:
////根据需要设置代码
}
returnsuper.onOptionsItemSelected(item);
}
7.两个Activity之间的跳转
//生成一个Intent对象
Intentintent=newIntent();
//设置Intent对象要启动的Activity
intent.setClass(xxx.this,xxx1.class);
//通过Intent对象启动另外一个Activity
xxx.this.startActivity(intent);
8.使用XML来创建配置文件
其具体操作如下:
生成一个Preference资源文件,命名为xxx.xml,具体容如下
xmlversion="1.0"encoding="utf-8"?
>
xmlns:
android="schemas.android./apk/res/android"
android:
title="系统设置">
xmlns:
android="schemas.android./apk/res/android"
android:
title="登录设置"
android:
summary="settingsaboutemotions"android:
key="settings">
android:
title="是否记住密码?
"
android:
summaryOn="是"
android:
summaryOff="否"
android:
defaultValue="true"android:
key="opt_remember">
……………………………….>
………………………>
…………………………..>
…………………………………………..>
在xxx.java中获取这个xxx.xml文件代码如下:
addPreferencesFromResource(R.xml.preferences);
根据key找到控件XXXCheckBox
整个java代码可以参考:
.cnblogs./franksunny/archive/2011/10/21/2219890.html
有参考价值的代码:
SharedPreferencessettings=getSharedPreferences("settings",0);
//自动填充密码
StringstrPswInputLable=settings.getString(getString(R.string.strPswInputLabel),null);
//记住密码checkbox设置
finalCheckBoxmlogin_cb_savepwd=(CheckBox)findViewById(R.id.login_cb_savepwd);//记住密码checkbox对象
Stringck1=settings.getString(getString(R.string.saveaccount),
null);//checkbox记录的值
if(ck1!
=null&&ck1.equals("true")){mlogin_cb_savepwd.setChecked(true);}
mlogin_cb_savepwd.setOnCheckedChangeListener(newCompoundButton.OnCheckedChangeListener(){
//Override
publicvoidonCheckedChanged(CompoundButtonbuttonView,
booleanarge){
//TODOAuto-generatedmethodstub
SharedPreferencessettings=getSharedPreferences("settings",0);
Stringck1=settings.getString(getString(R.string.saveaccount),null);
if(ck1!
=null&&ck1.equals("true")){
settings.edit()
putString(getString(R.string.saveaccount),"false").commit();
settings.edit().remove(getString(R.string.saveaccount)).commit();
mlogin_cb_savepwd.setChecked(false);
}
}
});
9.Sqlite数据库的使用
在Android应用中创建数据库后数据库文件是存储在/data/data/应用包名/databases/下。
在Android中使用到SQLite会涉及到以下三个类或接口:
SQLiteOpenHelper
SQLiteOpenHelper构造方法,一般传递一个要创建的数据库名称name参数
onCreate创建数据库时调用
onUpgrade版本更新时调用
getReadableDatabase创建或打开一个只读数据库
getWritableDatabase创建或打开一个读写数据库
SQLiteDatabase
openOrCreateDatabase打开或者创建数据库
insert添加一条记录
delete删除一条记录
query查询记录
update更新记录
execSQL执行一条SQL语句
close关闭数据库
Cursor
getCount总记录条数
isFirst判断是否第一条记录
isLast判断是否最后一条记录
moveToFirst移动到第一条记录
moveToLast移动到最后一条记录
move移动到指定记录
moveToNext移动到下一条记录
moveToPrevious移动到上一条记录
getColumnIndexOrThrow根据列名称获得列索引
getInt获得指定列索引的int类型值
getString获得指定列索引的String类型值
具体操作如下:
创建一个类Class继承SQLiteOpenHelper,具体可以参考下面一段代码
publicclassDB{
publicstaticfinalStringKEY_ACCOUNTS="accounts";
publicstaticfinalStringKEY_SAVEACCOUNT="saveaccount";
publicstaticfinalStringKEY_PWD="pwd";
publicstaticfinalStringKEY_NAME="name";
publicstaticfinalStringKEY_IMAGE="image";
publicstaticfinalStringKEY_AGE="age";
publicstaticfinalStringKEY_ADDRESS="address";
publicstaticfinalStringKEY_GENDER="gender";
publicstaticfinalStringKEY_VISIBLE="visible";
publicstaticfinalStringKEY_SAVEPWD="savepwd";
publicstaticfinalStringKEY_OPENVIBRA="openvibra";
publicstaticfinalStringKEY_RECEIVEGROUPMSG="receivegroupmsg";
publicstaticfinalStringKEY_QUITE="quite";
privateContextmctx;
privateDatabaseHelperdbHelper;
privateStringaccounts;
privatestaticSQLiteDatabasedb;//定义一个SQLiteDatabase的变量
//Constructor构造函数
publicDB(Contextmctx){
this.mctx=mctx;
}
publicvoidopen(){
dbHelper=newDatabaseHelper(mctx);
try{
db=dbHelper.getWritableDatabase();
}
catch(SQLiteExceptione){
db=dbHelper.getReadableDatabase();
}
}
publicstaticclassDatabaseHelperextendsSQLiteOpenHelper{
privatestaticfinalStringDATABASE_NAME="load.db";
privatestaticfinalintDATABASE_VERSION=2;//版本号
/**
*创建表名
*/
staticfinalStringDATABASE_TABLE="user";
/**
*创建一个字符常量
*/
privatestaticfinalStringDATABASE_CREATE=
"CREATETABLEuser("+
"accountsint(10)PRIMARYKEY,"+"saveaccountint(10),"+
"pwdint(20),"+"namechar(20),"+"imagevarchar(20),"+"ageint(10),"+"addressvarchar(20),"+
"genderchar(20),"+"visibleint(3),"+"savepwdint(3),"+"openvibraint(3),"+"receivegroupmsgint(3),"+
"quiteint(3)"+
");";
/*由于simpleCursorAdapter的方法只识别_id,所以,
*用到sqlite的simpleCursorAdapter时,必须把数据表的主键命名为_id。
*/
publicDatabaseHelper(Contextcontext){
super(context,DATABASE_NAME,null,DATABASE_VERSION);
//TODOAuto-generatedconstructorstub
}
//创建数据库
Override
publicvoidonCreate(SQLiteDatabasedb){
//TODOAuto-generatedmethodstub
db.execSQL(DATABASE_CREATE);
}
//更新数据库
Override
publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){
//TODOAuto-generatedmethodstub
db.execSQL("DROPTABLEIFEXISTS"+DATABASE_TABLE);
onCreate(db);
}
}
根据自己的实际需要数据库管理类
下面给出几个参考代码:
//添加用户,插入数据:
publiclongadduser(Stringaccounts,Stringpwd,Stringsaveaccount){
//insert方法插入的一行记录使用contentValues存放
ContentValuesargs=newContentValues();
args.put(KEY_ACCOUNTS,accounts);
args.put(KEY_PWD,pwd);
args.put(KEY_SAVEACCOUNT,saveaccount);
//返回新添记录的行号,该行号是一个部值,与主键id无关,发生错误返回-1
returndb.insert(DatabaseHelper.DATABASE_TABLE,null,args);
}
//添加更新,修改数据:
publicbooleanupdate(Stringaccounts,Stringpwd){
ContentValuesargs=newContentValues();
args.put(KEY_PWD,pwd);
returndb.update(DatabaseHelper.DATABASE_TABLE,args,"accounts=?
",newString[]{accounts})>0;
}
//作者定义的新类
publicCursorcheckUser(Stringaccounts,Stringpwd){
CursormCursor=(SQLiteCursor)db.query(true,DatabaseHelper.DATABASE_TABLE,
newString[]{KEY_ACCOUNTS},
"accounts=?
andpwd=?
",
newString[]{accounts,pwd},null,null,null,null);
System.out.println(mCursor);
returnmCursor;
}
/**
*我自己添加的用来保存用户个人信息:
account、name、gender、age、image、address
*
*/
publiclongupdate(Stringaccounts,Stringname,Stringsex,Stringage,intimage,Stringaddress){
//insert方法插入的一行记录使用contentValues存放
ContentValuesargs=newContentValues();
args.put(KEY_ACCOUNTS,accounts);
args.put(KEY_NAME,name);
args.put(KEY_GENDER,sex);
args.put(KEY_AGE,age);
args.put(KEY_IMAGE,image);
args.put(KEY_ADDRESS,address);
//返回新添记录的行号,该行号是一个部值,与主键id无关,发生错误返回-1
/**
*关键问题是如何把第四个参数设置我要输入的用户名
*/
returndb.update(DatabaseHelper.DATABASE_TABLE,args,"accounts=?
",newString[]{accounts});
}
需要用到数据库的地方进行初始化数据库、调用即可。
数据库中还经常使用到Cursor
Cursor是每行的集合。
使用moveToFirst()定位第一行。
必须知道每一列的名称,必须知道每一列的数据类型。
Cursor是一个随机的数据源。
关于Cursor的重要方法:
close()关闭游标,释放资源。
copyStringToBuffer(intcolumnIndex,CharArrayBufferbuffer)在缓冲区中检索请求的列的文本,将将其存储。
getColumnCount()返回所有列的总数。
getColumnIndex(StringcolumnName)返回指定列的名称,如果不存在返回-1。
getColumnIndexOrThrow(StringcolumnName)从零开始返回指定列名称,如果不存在将抛出IllegalArgumentException异常。
getColumnName(intcolumnIndex)从给定的索引返回列名。
getColumnNames()返回一个字符串数组的列名。
getCount()返回Cursor中的行数。
moveToFirst()
移动光标到第一行。
moveToLast()移动光标到最后一行。
moveToNext()移动光标到下一行。
moveToPosition(intposition)移动光标到一个绝对的位置。
moveToPrevious()移动光标到上一行
如何在利用图片的路径打开图片:
希望直接使用res/drawable中的图片,就需要通过下面的方法