我是
靠谱客的博主
甜甜彩虹,最近开发中收集的这篇文章主要介绍
Android开发学习笔记 开源项目之Android 最新篇 ,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
开源汇总:http://www.colobu.com/2014/08/15/android-components-collection/
移动开发经验http://www.mobile-open.com/
尺寸:http://www.yixieshi.com/ucd/21426.html http://www.jianshu.com/p/b94803509d01
关于Activity好的文章:http://limingnihao.iteye.com/blog/851337
1.Activity四种launchMode:standard,singleTop,singleTask ,singleInstance
standard执行oncreate 后面三种都会执行onNewIntent()
默认stantard每启动一次都会创建一个新的activity
singleTask 如果前面创建过该activity,就会将该activity栈前面的栈全部移除,将该activity移入栈顶,有个问题是如果启动页面中加了这个的话每单击软件图标重新进入软件时会出现一些页面问题
singleTop只判断是否在栈顶有没有创建过该activity,没有就创建新实例放到栈顶,开发到现在感觉用不到
singleInstance 单例模式
2.
如果I之前打开过的Activity,现在处于onPause或onStop 状态的话
其他应用再发送Intent的话,执行顺序为:onNewIntent->onRestart->onStart->onResume
3.BroadCast 只要action匹配就会发送,上次调试的时候硬是傻逼的把action里面的名称写错了,还一直以为是广播没有发送出去,接收广播的接受者配置不对
4.LogCat经常出现收不到消息,因为有bug,如果每次出问题就重启Eclipse那。。。 所以下载一个修复了Bug的adb.exe,我是在http://download.csdn.net/detail/xd1103121507/5275652上面下载的,我去前面一直想在谷歌问题上下载,一个小时硬是没有成功。
5.自己去打印http和smack的时候经常显示的是
16进制的unicode中文编码
,如u540eu518du8bd5,很蛋疼,我要显示中文啊,用java的println可以直接打印出来,太麻烦了,网上找了好多资料,最终才让我找到两种转换方式,下面的正则表达式转换方法成功,上面的出错不知道什么原因
http://blog.csdn.net/lin772662623/article/details/8643443 (转换出错)
http://blog.csdn.net/hbuxzy/article/details/7209703 (转换正确)
6.发现即使用清理软件清理,服务还在运行,原来是Service中的子线程在onDestroy()的时候没有销毁停掉
7.创建SQLite数据库时总是提示 near "from": syntax error (code 1): 因为from是关键字,所以不能当成列名
8.使用broadcast的时候除了问题要考虑是否逻辑有问题,是否粗心把action给弄错了等等,自定义的广播最简单的直接添加action发送就行了,肯定能收到的,不要想的太复杂。
9.ListView的
onItemClick等事件失效
,将item里面的父容器设置为
android:descendantFocusability="blocksDescendants"
,
这样不需要单独的让每一个按钮控件等失焦9android:focusable设置为false)
10.判断事件的执行顺序自己测试一下就知道了,onActivityResult比onResume先执行
11.https://github.com/Trinea/android-open-project 这上面的开源项目和效果非常不错值得学习
http://www.cnblogs.com/hawkon/p/3593709.html
12.http://a.code4app.com/ 上面的示例代码可以拿来用或者学习,不需要积分
http://www.android100.org/
13.http://blog.csdn.net/banketree/article/details/7734476 Android 上百实例源码分析以及开源分析
14.学习Android 必备 实例大集合 http://blog.csdn.net/banketree/article/details/7643346
15.Android UI组件 http://blog.csdn.net/banketree/article/details/7966468
16.
开源项目之Android 最新篇
http://blog.csdn.net/banketree/article/details/9126491
Android开源工具库 http://www.open-open.com/lib/view/open1388479529516.html
最流行的android组件大全 http://www.open-open.com/lib/view/open1409108030307.html
17.推送平台:极光推送、百度推送、信鸽推送、友盟推送、个推推送、360推送 只用过百度推送,效果太差了
18.聊天平台:环信 是用的asmack库,xmpp协议
19.推广平台:酷传
20.分享平台:sharesdk 友盟 个人感觉shareSDK一键分享批量懒惰分享更简单,友盟分享更适合手动定制搭建平台,sharesdk分享中注意配置文件微信分享和易信分享,其中微信分享需要注册审核,key是指签名中的md5密钥,而像
百度地图等是用的shal1密钥,注意
微信分享创建应用的的key是
MD5密钥全部小写并且去掉冒号
21.测试平台:百度开放平台、腾讯开放平台
在所有的平台中
百度和友盟这两个平台功能最多,包括推送、统计、反馈等等
22.自动生成app平台,有点意思:http://www.douban.com/note/265297088/ http://www.csdn.net/article/2013-05-14/2815264-14-diy-app-builders-for-non-programmers/1
23.字符串中往往我们只要改一个值,我以前的做法是要么把字符串分段,有的时候还分成不同的textView控件,实际上可以通过
<xliff:g>这个标签来简化工作。
24.runOnUiThread这个线程是个好东西啊,以前总是用Handler,麻烦,提示信息用下面的方法
Toast mToast;
mToast = Toast.makeText(this, "", Toast.LENGTH_LONG);
private void showTip(final String str){
runOnUiThread(new Runnable() {
@Override
public void run() {
mToast.setText(str);
mToast.show();
}
});
}
25.字符串拆分中
要注意的是,如果使用"."、"|"、"^"等字符做分隔符时,要写成string.split("//^")的格式
26.TextView可以设置字间距,但是将textScaleX最多设置成1.5左右,不然文字会被拉伸,所以我就是在文字中间加空格,写一个将字符串分解的并文字中间加上空格这样来体现字间距的效果
27.RadioGroup在我的华为手机4.1系统中自动给RadioButton加了一个paddingLeft属性,所以为了防止变形,需要在RadioButton中添加一个paddingLeft="0dip"的属性,搞了我三个小时才发现这个问题。
28.隐藏键盘一直都很头疼,下面完全可以解决,在其它部分触摸的时候和退出activity时就调用方法将键盘隐藏掉
protected void hideKeyboard() {
if (getCurrentFocus() != null)
keyboardmanager.hideSoftInputFromWindow(getCurrentFocus()
.getWindowToken(), 0);
}
29.多媒体时调节音量有时候找不到原因为什么弹不出音量调节界面 setVolumeControlStream(AudioManager.STREAM_MUSIC);
AudioManager mAudioManager = (AudioManager) this
.getSystemService(Context.AUDIO_SERVICE);
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
mAudioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,
AudioManager.ADJUST_RAISE,
AudioManager.FX_FOCUS_NAVIGATION_UP);
} else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
mAudioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,
AudioManager.ADJUST_LOWER,
AudioManager.FX_FOCUS_NAVIGATION_UP);
}
return true;
}
30.使用Adapter要注意的问题
1)如果有headview和footview,记得他们也是占onItemClickLisener中position的位置的
addHeaderview和addFooterview要在setAdapter之前,否则显示不出来
2)经常获取数据的时候我们会在异步线程中,那么调用adapter.refresh()的时候就要注意判断程序是不是已经onPause()了,感觉很麻烦,虽然错误概率不高,用户多了以后发现错误列表中一大堆这样的错误,为了简单起见,在异步线程中adapter.refresh()就加个try...catch算了,如果还需要在onResume中再来个adapter.refresh().
31.
https://github.com/inferjay/AndroidDevTools 这个上面集合了android开发从开发工具到编译到反编译的所有工具
32.
CrossApp是一个免费的跨平台开发原生态App,编程语言为C++,可以学习一下 http://www.9miao.com/thread-56278-1-1.html http://blog.csdn.net/qq446569365/article/details/39119689
33.有时候想主动触发按钮的事件,
((ImageButton)v).performClick();
34.webview在onPageFinished中得到getContentHeight()一直=0,在Handler.postDelay中就正确了
实际高度=webview.getContentHeight*webview.getScale()
35.将一张图片分割
bitmap = Bitmap.createBitmap(bitmap, xValue, yValue,
pieceWidth, pieceHeight);
36.在listview或者gridview中想要得到adapter中item的点击位置
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
mDownX = (int) ev.getX();
mDownY = (int) ev.getY();
// 根据按下的X,Y坐标获取所点击item的position
mDragPosition = pointToPosition(mDownX, mDownY);
if (mDragPosition == AdapterView.INVALID_POSITION) {
return super.dispatchTouchEvent(ev);
}
}
}
37.利用
LayoutInflate.
inflate(layoutId, null )View中控件变形,详见http://jingyan.baidu.com/article/a681b0de31f4753b1943464a.html
我的解决办法是LayoutInflater.from(getContext()).inflate(R.layout.view, this, false);
38.根据position得到listview的view
public View getViewByPosition(int pos, ListView listView) {
final int firstListItemPosition = listView.getFirstVisiblePosition();
final int lastListItemPosition = firstListItemPosition + listView.getChildCount() - 1;
if (pos < firstListItemPosition || pos > lastListItemPosition ) {
return listView.getAdapter().getView(pos, null, listView);
} else {
final int childIndex = pos - firstListItemPosition;
return listView.getChildAt(childIndex);
}
}
39.onActivityResult执行不正常
Activity a启动Activity b,如果给b设置了lauhchMode,不是standard,那么结果会是这样先执行Activity a的onActivityResult再执行Activity a的 onResume,finish掉Activity b以后只会执行到Activity a的onResume。原因分析,在其它模式下Activity b实际上并没有被销毁掉。
40.scrollview嵌套listview
scrollview里面嵌套了一个listview ,通过设置一个方法设置了listview的高度 现在的情况就是进到这个界面的时候看到的不是最上面 而是中间 ,该问题的解决办法为:
mScrollView.smoothScrollTo(0,20);
如此以上代码还是无效, 在代码里去掉listview的焦点 lv.setFocusable(false),再试下就可以了;
41.dialog圆角 ,按照setView(view) show()无论怎么配置,圆角背景总有4个棱角很丑
有人说用
getWindow().setBackgroundDrawable(new BitmapDrawable());
或者
getWindow().setBackgroundDrawableResource(android.R.color.transparent);
我试了不起作用;
另外有人说,自定义dialog继承自dialog这样就不会出现了
最终我是直接dialog.show();setContentView(view)这样就没有棱角了
42.
在不同APP之间通信使用Messager的使用注意事项:bundle传递parceble对象会说找不到类,在取bundle的数据前,先调用bundle.setClassLoader(getClass().getClassLoader());不能往message.obj中存放字符串等非parcebale数据,可以通过bundle来传递数据;在5.0系统以后必须要显示的启动服务。
最后
以上就是甜甜彩虹为你收集整理的Android开发学习笔记 开源项目之Android 最新篇 的全部内容,希望文章能够帮你解决Android开发学习笔记 开源项目之Android 最新篇 所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复