android——小常识

记载你或许想要了解的关于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()方法来自定义取消按钮。


      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值