本文主要以FAQ的形式记录android开发过程中的一些问题。
Q:让光标停在edittext末尾?
A:
//获取焦点,并将光标停在正文最后
editContent.requestFocus();
editContent.setSelection(content.length());
Q:隐藏键盘?
A:链接1。使用过程中,只有一个focusable对象,所以不能使用edittext的clearFocus()方法,该函数说明中有讲,可以在manifest中配置相应的activity,android:configChanges="orientation|keyboardHidden"。
Q:如何使用进度条?
A:看链接1。
我使用过程中出现一个问题,数据恢复之后,进度条才出现。
后来发现是由于用了new Thread(xx).run();造成;
应该用new Thread(xx).start();start是让reciver来run;
Q:android签名apk以及优化:
A:签名之后的apk谷歌推荐使用zipalign.exe(位于android-sdk-windows\tools目录下)工具对其优化:
tooxxpalign -v 4 demo_signed.apk final.apk
Q:android2.1系统如何进行代码混淆?
1,在project.properties中配置
proguard.config=proguard.cfg
2,将proguard.cfg文件放置到工程文件中(与AndroidManifest.xml一个目录下即可)
3, 使用android2.3提供的proguard.cfg的基础上对proguard进行配置
-dontwarn android.support.v4.*
有第三方包则添加类似句子(下面是googlead第三方包)
-libraryjars libs/GoogleAdMobAdsSdk-6.4.1.jar
#不对第三方包进行代码混淆
-dontwarn com.google.ads.**
-keep class com.google.ads.**{*;}
测试proguard配置成功,参看反编译方法:链接1,链接2.
Q:SharedPreferences如何使用?
A:看链接。
Q:如何加快SDK更新速度?
A: 1,在SDK Manager下Tools->Options打开了SDK Manager的Settings,
选中“Force https://… sources to be fetched using http://…”,强制使用http协议。
2,然后改hosts文件。Windows在C:\WINDOWS\system32\drivers\etc目录下,Linux用户打开/etc/hosts文件。
打开文件后添加以下内容。
#Google主页
203.208.46.146 www.google.com
#这行是为了方便打开Android开发官网 现在好像不翻墙也可以打开
74.125.113.121 developer.android.com
#更新的内容从以下地址下载
203.208.46.146 dl.google.com
203.208.46.146 dl-ssl.google.com
Q:如何设置带滚动条的Textview ?
A :在xml文档中设置如下两个属性即可
android:singleLine="false"
android:scrollbars="vertical"
Q:如何使用PopupWindow?
A:像使用Toast一样使用PopupWindow,难点是创建新的视图。链接1,链接2。
Q:android 通过Application类 共享全局数据?
A:看链接。
Q:如何利用系统提供的搜索框,实现搜索功能?启动Activity (A)如何向实现搜索功能的Activity(B)传递数据?
A:A 中调用onSearchRequested(),B中获取启动B的Intent对象进而取得搜索框中的值,然后自己实现搜索功能。若要有A向B传递数据需要重写onSearchRequested();方法,并使用Intent由A向B传递数据。见文章及代码。
Q:如何实现显示程序忙的等待界面?
A:在主线程中构建一个等待界面;然后在生成一个Handler对象,并重写其中处理消息的方法事项;之后在新生成的线程中做相关处理,处理完毕(或过程中)发送消息给主线程,以便协调主线程和新线程之间的关系,如主线程显示新线程处理进度。参考1;参考2.
Q:如何删除sqlite数据库中重复的记录?
A:链接1,看2楼。例子:删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录
delete from people where peopleId in
(select peopleId from people group by peopleId having count(peopleId) > 1)
and rowid not in
(select min(rowid) from people group by peopleId having count(peopleId )>1)
Q:如何解析XML文件?
Q:如何实现一个文件夹,以实现简单的文件浏览功能?
Q:如何将sqlite数据库中的内容以xml的格式备份到sd卡?
A:查询数据库,之后将查询内容使用XmlSerializer生成xml文档。参考1 Android 短信的备份与恢复(导入导出),参考2详解Android中AsyncTask的使用,参考3 Android中使用XmlSerializer拼装XML数据。
Q:当打开一个页面后,如何根据需要控制键盘的打开和关闭?
//关闭键盘
InputMethodManager imm=(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(edReview.getWindowToken(), 0);
//显示键盘,在onCreate()中调用
Timer timer=new Timer();
timer.schedule(new TimerTask(){
public void run(){
((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE)).toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
}
}, 50);
Q:Android 数据查询中的query函数如何使用?
Q:在AlertDialog中包含一个EditText,如何实现?怎么能够取得这个EditText?
A:连接1.
EditText editText = new EditText(this);
new AlertDialog.Builder(this)
.setTitle("请输入")
.setIcon(android.R.drawable.ic_dialog_info)
.setView(editText )
.setPositiveButton("确定", null)
.setNegativeButton("取消", null)
.show();
Q:添加页面,手机上的返回键如何等同于舍弃按钮(对应编辑页面的还原按钮)?
A:在相应的页面重写onKeyDown函数:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
// do something on back.
return true;
}
return super.onKeyDown(keyCode, event);
}
Q:在添加页面,按下舍弃键如何给出提示按钮?
//给出提示是否要舍弃,如果要舍弃则返回到MainActivity
AlertDialog.Builder builder = new AlertDialog.Builder(this);
//builder.setIcon(R.drawable.icon);
builder.setMessage("确定要舍弃当前条目?")
.setCancelable(false) //不同通过返回按钮取消该对话框
.setPositiveButton("确定",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
//返回当前结果给上一个MainActivity,setResult会调用MainActivity中的onActivityResult方法
AddItemActivity.this.setResult(RESULT_DISCARD, null);
//结束当前Activity
AddItemActivity.this.finish();
}
})
.setNeutralButton("取消",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
//该方法不做事,就可以关闭AlertDialog,但仍然留在本页
}
});
builder.show();
Q:在eclipse如何打开一个项目文件?
A:在window>showview>other>搜索package Explorer,在出现的package Explorer中,右键>import>General>Existing Projects into Workspace>browse>选择你的项目确定就可以了。
Q:如何在Activity之间传递、回传数据?
Q:在android中,往sqlite database 中的table 插入数据的时候,如果此表的id是自增的,如何在插入数据的同时获得这个自增id字段的值?
A:对于android客户端上若不是多线程向数据库中插入数据的话可以在插入成功之后使用max(自增字段)获得该条目的id值;csdn讨论帖。
String sql="SELECT max("+FILED1_idRecord+") FROM "+TABLE_RECORD;
Cursor cursor=db.rawQuery(sql, null);
long idCurrent=0;
cursor.moveToFirst();
if(cursor.getCount()==1){
idCurrent=cursor.getLong(0);
System.out.println(idCurrent);
//其他操作
}
Q:sqlite如何设置id自增长?
Q:Android开发中插入新的Activity?
A:一个类对应一个页面描述的xml文件,之后将二者关联,最后调用新的页面。连接1。
Q:android开发环境如何搭建?
A:教程。