?? ?一些小问题,不大!但是足够让你花上一天或者一个礼拜的时间去解决!
原创文章:转载请注明作者:geolo。和文章出处:http://blog.csdn.net/geolo/article/details/7058515
?
?
1.Android中的ListView无法点击事件
?
?如果ListView子视图中有Button等抢焦点的控件,那么需要在ListView的xml配置中加入android:descendantFocusability="blocksDescendants"这段话,同时,对Button等控件需要android:focusable="false"的处理。
?
2.?软键盘,顶起自定义的底部菜单(RelativeLayout)。
?
解决方法是Mainfest配置中对应的Activity加入android:windowSoftInputMode="stateVisible|adjustPan"信息
?
3.?不按Home键,让程序后台运行并退回Home界面!(通过Button模拟android的Home键盘)?
- PackageManager?pm?=?mActivity.getPackageManager();????
- ResolveInfo?homeInfo?=?pm.resolveActivity(new?Intent(Intent.ACTION_MAIN)??
- .addCategory(Intent.CATEGORY_HOME),?0);????
- ActivityInfo?ai?=?homeInfo.activityInfo;????
- Intent?startIntent?=?new?Intent(Intent.ACTION_MAIN);????
- startIntent.addCategory(Intent.CATEGORY_LAUNCHER);????
- startIntent.setComponent(new?ComponentName(ai.packageName,ai.name));??
- startIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);????
- mActivity.startActivity(startIntent);??
?
?
?
?
4.ListView中不能使用Edittext的原因。
?
?
其一:?android:descendantFocusability="blocksDescendants",是该属性做的坏!该属性还会导致layout中的Edittext不能得到焦点。
其二:listview中如果用Edittext会导致Edittext内的内容在ListView自主刷新的时候,内容丢失。因此,如果数据量不是很多的情况下,可以采用Scroll+Layout方式
?
5.?ListView或者ScrollView,定位到你指定的“自定义”layout的位置。
- final?int?x?=?v.getScrollX();//获取你自定义layout的X轴,貌似这边一直为0.你应该获取layout的getLeft的位置。哈哈??
- final?int?y?=?v.getTop();//获取你自定义layout的顶部的Y轴位置??
- ??
- mScrollView.post(new?Runnable()?{//是个线程刷新!??
- [email protected]
- ????public?void?run()?{??
- ????????mScrollView.scrollTo(x,?y);//开始定位??
- ????}??
- });??
?
6.?设置最小heap内存为6MB大小。
?
private?final?static?int?CWJ_HEAP_SIZE?=?6*?1024*?1024?;?
VMRuntime.getRuntime().setMinimumHeapSize(CWJ_HEAP_SIZE);
?
7.在自己的应用中监听其他APK安装完成事件?
?
<receiver?android:name=".XXReceiver">??
????<intent-filter>??
????????<action?android:name="android.intent.action.PACKAGE_ADDED"></action>??
????????<data?android:scheme="package"?/><!--?注意!!?这句必须要加,否则接收不到BroadCast?-->??
????</intent-filter>??
</receiver>?
String?android.content.Intent.ACTION_PACKAGE_ADDED?=?"android.intent.action.PACKAGE_ADDED"?
Broadcast?Action:?A?new?application?package?has?been?installed?on?the?device.?The?data?contains?the?name?of?the?package.?Note?that?the?newly?installed?package?does?not?receive?this?broadcast.?
My?include?the?following?extras:?
????*?EXTRA_UID?containing?the?integer?uid?assigned?to?the?new?package.?
????*?EXTRA_REPLACING?is?set?to?true?if?this?is?following?an?ACTION_PACKAGE_REMOVED?broadcast?for?the?same?package.?
This?is?a?protected?intent?that?can?only?be?sent?by?the?system?
----------?
当系统中新安装了一个软件或重新安装一个软件都会触发这个action的广播,?
并发送intent给接收者,发送的intent中包话新安装应用的包名、系统指定给这个应用的ID、标识是否这个广播是在ACTION_PACKAGE_REMOVED广播发送之后发送的。?
8.?Android监听程序的安装和卸载
在android系统中,安装和卸载都会发送广播,当应用安装完成后系统会发android.intent.action.PACKAGE_ADDED广播。可以通过intent.getDataString()获得所安装的包名。当卸载程序时系统发android.intent.action.PACKAGE_REMOVED广播。同样intent.getDataString()获得所卸载的包名。
应用程序无法监听自己的安装与卸载,但覆盖安装可以监听到自己的android.intent.action.PACKAGE_REMOVED广播。
?
public?class?PackageReceiver?extends?BroadcastReceiver{
@Override
????public?void?onReceive(Context?context,?Intent?intent)?{????????
????????if?(intent.getAction().equals("android.intent.action.PACKAGE_ADDED"))?{
????????????String?packageName?=?intent.getDataString();
????????????Log.i("Test","---------------"?+?packageName);
????????}
?
????????if?(intent.getAction().equals("android.intent.action.PACKAGE_REMOVED"))?{
?????????String?packageName?=?intent.getDataString();
??????????Log.i("Test","---------------"?+?"PACKAGE_REMOVED"?+?packageName);
????????}
}
}
?
<?xml?version="1.0"?encoding="utf-8"?>
<manifest
???xmlns:android="http://schemas.android.com/apk/res/android"
????package="com.test"
????android:versionCode="1"
????android:versionName="1.0">
????<application
?????android:icon="@drawable/icon"
?????android:label="测试">
????????<receiver?android:name=".PackageReceiver"
??????????????????android:label="@string/app_name">
????????????<intent-filter>
??????????????<action?android:name="android.intent.action.PACKAGE_ADDED"?/>
??????????????<action?android:name="android.intent.action.PACKAGE_REMOVED"?/>
???????????????<data?android:scheme="package"?/>
????????????</intent-filter>
????????</receiver>
????</application>
????<uses-sdk?android:minSdkVersion="7"?/>
???<uses-permission?android:name="android.permission.INTERNET"?/>
????<uses-permission?android:name="android.permission.RESTART_PACKAGES"/>
????<uses-permission?android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
</manifest>
?????????9.背景图片平铺
1.?在res/drawable的文件夹中新建一个bg_repeat.xml文件。
?
2.?文件代码为:
<?xml?version?="1.0"?encoding?="utf-8"??>
?
<bitmap?xmlns:android?="http://schemas.android.com/apk/res/android"
?
???android:src?="@drawable/bg"
?
???android:tileMode?="repeat"?/>
3.?其中bg就是单个图片文件。
4.?调用的时候,调用这个bg_repeat.xml?--->android:background="@drawable/bg_repeat"
?
?
?10.?Android?view中的requestLayout和invalidate方法
?requestLayout:当view确定自身已经不再适合现有的区域时,该view本身调用这个方法要求parent?view重新调用他的onMeasure?onLayout来对重新设置自己位置。
特别的,
当一个View需要parent?view重新调用他的onMeasure?onLayout来对重新设置自己位置时,特别是当你修改了view的layoutparameter,它的值还没能应用到view上,调用这个方法就可以了,但是要注意parent?view的onLayout是怎么实现的
?
?
11. 关于SpannableString在内存容量小的手机上出现的内存、堆栈溢出的问题!
- ???????SpannableString?mSpannableString?=?new?SpannableString("abcdefg/斗眼");//崩溃??
- SpannableString?mSpannableString?=?new?SpannableString("abcdefg斗眼");//崩溃??
- SpannableString?mSpannableString?=?new?SpannableString("abcdefg//");//不崩溃??
- SpannableString?mSpannableString?=?new?SpannableString("abcdefg/");//不崩溃??
- SpannableString?mSpannableString?=?new?SpannableString("abcdefg");//不崩溃??
可以总结出,SpannableString新建汉字的时候需要比较大的内存容量,这个问题,需要深究思考!