android控件的细节方法设置——8月工作中遇到的总结

版权声明:出于感谢(如果有收获)或对知识的尊重,未经允许禁止转载 https://blog.csdn.net/bendan50/article/details/82226375

没那么系统,比较零散,利用晚上“加班”的时间整理下一天的“收获”——补了下好多不知道的知识点或是细节。

目录

1、Resources.NotFoundException问题

2、View的setTag()和getTag()方法

3、setOnTouchListener和setOnKeyListener

3.1事件消费优先级和顺序

4、与手机的IMSI  IMEI


参考文献:

https://blog.csdn.net/u013687632/article/details/46318321

https://blog.csdn.net/hard__ball/article/details/70184066

https://blog.csdn.net/u013059863/article/details/49847109

https://blog.csdn.net/weicaihui2008/article/details/51461623

1、Resources.NotFoundException问题

同事写的代码中在try-catch中提到了这个异常,其实很好理解:资源没有找到。然后就百度了一下,发现一点需要记录提醒自己,勿踩前人之坑。

TextView中设置文字,有多个重载方法。TextView.setText(text);如果text参数为char或string类型,则成功设置文字;如果text参数为int类型,则可能就会报资源没有找到。因为重载方法中,当参数为int时,其代表的是Resources ID。


2、View的setTag()和getTag()方法

很明显这是一对方法,重点是什么是Tag,它有什么用,因此才能知道为什么要设置它。

Tag的英文指:标签,并且它的参数为Int类型,所以猜测其跟ID号类似,用以标识View控件。对于使用场景,例如多个Button判断哪个Button点击了,来触发相应的点击事件。

应用比较多的(有意义的)是在ListView中,因为要重写BaseAdapter,每个Item都加上Button,自然有点击事件。Adapter有个getview方法,可以使用setTag把查找的view缓存起来方便多次重用。


3、setOnTouchListener和setOnKeyListener

对于点击或是键盘的操作都属于事件监听,先来表述下事件消费的优先级和顺序。

3.1事件消费优先级和顺序

事件监听器返回值为Boolean类型,默认返回值为false.表示事件没有被消费,会继续向下传递(此处就是所谓的优先级和消费顺序)。如果返回值为true,则表示事件被当前的监听器消费掉了,不会继续向下传递。

对于setOnTouchListener的onTouch方法优先级比onTouchEvent高,会先触发;若onTouch方法返回false,会接着触发onTouchEvent,反之则不会被调用。

setOnKeyListener是针对键盘的监听者,例如手机键盘和外设键盘。当OnKey()返回值是false时,事件会传递下去,监听器在监听之后EditText捕获到此事件,并进行显示;当OnKey()返回值是true时,监听器监听处理之后EditText无法捕获到事件,所以无法显示。


4、与手机的IMSI  IMEI

/**
     * 获取手机IMEI号
     */
    public static String getIMEI(Context context) {
        TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(context.TELEPHONY_SERVICE);
        String imei = telephonyManager.getDeviceId();

        return imei;
    }

/**
       * 获取手机IMSI号
       */
     public static String getIMSI(Context context){
        TelephonyManager mTelephonyMgr = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
        String imsi = mTelephonyMgr.getSubscriberId();

        return imsi ;
    }

(1)IMEI(International Mobile Equipment Identity,国际移动身份识别码):是由15位数字组成的”电子串号”,其组成结构为TAC(6位数字)+FAC(两位数字)+SNR(6位数字)+SP (1位数字)。它与每台手机一一对应,而且该码是全世界唯一的。每一只手机在组装完成后都将被赋予一个全球唯一的一组号码,这个号码从生产到交付使用都将被制造生产的厂商所记录。 IMEI码贴在手机背面的标志上,并且读写于手机内存中。它也是该手机在厂家的”档案”和”身份证号”。 
(2)IMSI(International Mobile Subscriber Identification Number,国际移动用户识别码):是区别移动用户的标志,储存在SIM卡中,可用于区别移动用户的有效信息。其总长度不超过15位,同样使用0~9的数字。其中MCC是移动用户所属国家代号,占3位数字,中国的MCC规定为460;MNC是移动网号码,最多由两位数字组成,用于识别移动用户所归属的移动通信网;MSIN是移动用户识别码,用以识别某一移动通信网中的移动用户。


5、手机服务提供商名字SPN(Returns the Service Provider Name)

TelephonyManager tm = (TelephonyManager)Context.getSystemService(Context.TELEPHONY_SERVICE);
    String SPN = tm.getSimOperatorName()

//spn
private String getSimOperatorName(SubscriptionInfo sir) {
    if (sir == null) {
        return null;
    }
    return getSimOperatorName(sir.getSubscriptionId());
}

private String getSimOperatorName(int subId) {
    String simOperatorName = null;

    try {
        Method method = TelephonyManager.class.getDeclaredMethod("getSimOperatorNameForSubscription", int.class);

        simOperatorName = (String) method.invoke(mTelephonyManager, subId);
    } catch (Exception e) {
    // TODO Auto-generated catch block
        e.printStackTrace();
    }

    return simOperatorName;
}

猜你喜欢

转载自blog.csdn.net/bendan50/article/details/82226375
今日推荐