最近接到的任务其实只是修改这个功能,原功能是:
点击到短信,系统根据识别出的数字段和链接段弹出ListView的选择菜单,用户可以对这些号码和链接进行拨号发短信或者打开网页的操作。
修改后的需求是:
点击短信中相应的号码或链接,只针对该号码或链接产生菜单。
我们先看看某的实现方法:
(1)首先利用我查找代码一贯的高效低智商的找到这个短信会话相关的类:ComposeMessageActivity.java
其中涉及到短信会话列表的是这样一个类
private MessageListView mMsgListView;
初始化的方法是
initMessageList()
(2)进入这个方法就可以看到mMsgListView的onItemClick方法,继续追踪方法里面调用的((MessageListItem) view).onMessageListItemClick();
当然也不要忽略一段重要代码,那就是mMsgListView的adapter,
mMsgListView.setAdapter(mMsgListAdapter);这个会在下章关于修改后需求的实现中介绍。
还有mMsgListView.setItemsCanFocus(false);关于这个设置的意义,主要是因为这个短信会话ListView中隐藏了多选的CheckBox,如果不设置这个属性,焦点将被item获取而使得CheckBox无法获得焦点而不能勾选。
(3)继续下面,看来要接触到真相了!
onMessageListItemClick()中可以清晰的看到点击事件到菜单的产生:
方法前面都是些关于item中元素的判断就忽略了,看到关键数组:final URLSpan[] spans = mBodyTextView.getUrls();
mBodyTextView肯定就是短信主体内容无疑了,那这个getUrls()方法是什么呢?
先转到配置文件中,来理解这个urls:
<TextView
android:id="@+id/text_view"
android:layout_width="wrap_content"
android:layout_h