记载你或许想要了解的关于android的一些小知识
UI adapter list采取addall的方式,否则可能因为UI线程与非UI线程同时使用同一个list对象造成一下crash:
java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. Make sure your adapter calls notifyDataSetChanged() when its content changes. [in ListView(2131362697, class android.widget.ListView) with Adapter
203.208.46.146 dl.google.com
203.208.46.146 dl-ssl.google.com
用crusor.query时记得try catch一下,不然可能会报SecurityException:
例如:Permission Denial: reading com.android.providers.contacts.ContactsProvider2 uri content://com.android.contacts/data/phones from pid=12479, uid=10178 requires android.permission.READ_CONTACTS, or grantUriPermission()
java.lang.RuntimeException: Unable to start receiver com.taobao.nokia.BootBroadcastReceiver: android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
加FLAG_ACTIVITY_NEW_TASK flag是因为启动activity的Context不是一个Activity。Content的startActivity方法,需要开启一个新的task。如果使用 Activity的startActivity方法,不会有任何限制,因为Activity继承自Context,重载了startActivity方法。
事实上,activity 最外层的view是FrameLayout
设置http请求头User-Agent方法为System.get/setProperty("http.agent");
问题:在异步线程中调用getActivity()方法,存在fragment结束并销毁的隐患,导致抛出NullPointerException异常。
解决方案:在异步线程中不要使用getActivity()方法。
在下面代码中,getActivity()调用时出现了NullPointerException。
@Override public void onResume() { super.onResume(); new Thread(new Runnable() { @Override public void run() { FragmentActivity mActivity = getActivity(); mPreferenceHelper = new PreferenceHelper(mActivity); } }); } |
**当android sdk manager下载速度特别慢的时候,应该是google服务器不稳定。可以在C:\Windows\System32\drivers\etc下用记事本打开hosts文件,在底部加上"74.125.237.1 dl-ssl.google.com",完了重新勾选sdk下载应该就快多了。
1.为按钮设置简单的按键效果。
比如,在drawable文件夹中创建camera.xml,内容如下:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/camera_press" android:state_pressed="true"/>
<item android:drawable="@drawable/camera_press" android:state_focused="true"/>
<item android:drawable="@drawable/camera_normal" />
</selector>
代表触碰到及按下时图片为camera_press,常态下图片为camera_normal。
然后在layout布局文件中这样写即可:
<TextView
android:id="@+id/camera"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/camera"
/>
2.国际化
见上图文件目录,strings.xml一份放在values-zh下,默认的英文strings.xml放在values下。
图片的默认放在drawable-hdpi,包含中文的那几张图片放在drawable-zh-hdpi下。
这样android系统会根据用户选择的语言自动找到对应的资源文件。
3.R文件不能自动编译
一般是因为res下的layout文件包含错误,解决掉了就好了。
4.关于布局
个人认为RelativeLayout还是很好用的,常用属性如下:
android:gravity="center"代表组件的内容水平并且垂直居中
android:layout_alignParentTop="true"代表处于上级标签,即父组件的顶部
android:layout_margin="5dp"代表与父组件上下左右有5dp的间距
android:padding="10dp"代表该组件包含的内容与该组件本身上下左右有10dp的空隙
5.对话框
Builder builder = new AlertDialog.Builder(this)这种方式建立的dialog貌似不好调用自定义的取消按钮,
只有使用Dialog dialog = new Dialog(this)才能使用dialog.dismiss()方法来自定义取消按钮。