`
jacky22
  • 浏览: 4874 次
  • 性别: Icon_minigender_1
  • 来自: 成都
最近访客 更多访客>>
社区版块
存档分类
最新评论

andorid 中的URLSpan的用法

阅读更多
  最近反编译了别人的产品代码,看到了SpannableStringBuilder的 setSpan 方法,android中的文档定义是
public void setSpan (Object what, int start, int end, int flags)

Since: API Level 1
Mark the specified range of text with the specified object. The flags determine how the span will behave when text is inserted at the start or end of the span's range.

在应用中实际的使用就是文本加下划线,要网页链结一样,在网上找到了类似这样的代码

public void underline(int start,int end){
SpannableStringBuilder spannable=new SpannableStringBuilder(getText().toString());
CharacterStyle span=new UnderlineSpan();
spannable.setSpan(span, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
setText(spannable);
}

但是当我点这些下划线时,Activity是怎么响应并跳转的呢?

秘密是在 TextView中设定了这个
TextView.setText(localSpannableStringBuilder1);
TextView.setMovementMethod(LinkMovementMethod.getInstance());

这样是通过方法LinkMovementMethod去调用实际的响应,我又在网上查到了某个大牛写的关于这个方法的用法

它实现了一系列的方法,
比如它的onKeyDown调用ClickableSpan的onClick
URLSpan实现了ClickableSpan
用户点击一个url的话,就会调用LinkMovementMethod::onKeyDown,继而调用URLSpan的onClick,
我们看看URLSpan::onClick的实现
    @Override
    public void onClick(View widget) {
        Uri uri = Uri.parse(getURL());
        Context context = widget.getContext();
        Intent intent = new Intent(Intent.ACTION_VIEW, uri);
        intent.putExtra(Browser.EXTRA_APPLICATION_ID, context.getPackageName());
        context.startActivity(intent);
    }
它实际上是启动了一个activity,可能是web/email或者其他的满足intent filter/url schema的activity

上面的这段内容让我了解了,实际点击了这些链结后,就会去找满足intent filter/url schema的activity去响应。

我随后又查了intentfilter 的定义

  Intent and Intent Filters
    Android通过一个专门的Intent类来进行界面的切换。Intent描述了程序想做什么(intent,n.意图, 目的, 意向)。数据结构的2个最重要的部分是操作(action)与按照既定规则处理的数据(data)。典型的操作是MAIN (Activity的入口),VIEW,PICK,EDIT,等等。数据用URI表示。例如,查看某人的联系信息,你需要创建一个Intent,使用VIEW操作,数据则是一个指向此人的URI。
    有个相关的类叫IntentFilter。Intent是一个请求来做什么事情;IntentFilter则描述了一个Activity(或下文的IntentReceiver)能处理什么意图。显示某人联系信息的Activity使用了一个IntentFilter,就是说它知道如何处理应用到此人数据的VIEW操作。Activities在AndroidManifest.xml文件中使用IntentFilters。

最后我终于在AndroidManifest.xml找到了响应的Acitivity,并最终找到了点击的响应方法。

一个初学者就这样完成了一个问题的解决,不断的查询资料,并将其串起来,这是不是一种好的学习方式呢?

分享到:
评论

相关推荐

    Android之SpannableStringBuilder的简单使用

    在本文中,我们将深入探讨SpannableStringBuilder的使用方法,以及如何在实际应用中利用它来增强文本显示效果。 首先,SpannableStringBuilder是StringBuilder的一个子类,继承了其追加、插入和删除字符串的基本...

    Android中使用SpannableString实现百度超链接的代码清单.pdf

    2. 在`onCreate`方法中,获取TextView并初始化其内容。然后,使用indexOf()方法找到“百度一下”的索引位置,创建一个SpannableString对象,并在其上设置URLSpan。最后,通过setMovementMethod()方法使TextView支持...

    Android中的SpannableString类使用方法的代码清单.pdf

    下面我们将深入探讨SpannableString的使用方法。 首先,创建一个SpannableString对象,可以通过传入一个字符串来初始化。例如: ```java SpannableString spanText = new SpannableString("测试百度超链接"); ``` ...

    Android TextView中文字设置超链接、颜色、字体

    当我们在TextView的文本中插入URL时,可以使用`android:autoLink="web"`属性,让系统自动识别并转换为可点击的超链接。但这种方法可能无法满足所有需求,例如自定义链接样式。此时,我们可以使用`SpannableString`和...

    textview自定义email和tel的点击处理span

    在Android开发中,`TextView` 是一个非常常用的控件,用于显示文本信息。然而,有时候我们需要对`TextView`中的特定内容进行特殊处理,比如当文本中含有邮箱地址或电话号码时,我们希望用户能够直接点击这些内容进行...

    Android如何通过TextView实现超链接的跳转

    通过上述方法,你可以轻松地在Android应用中创建可点击的超链接,从而提升用户体验,让用户能够方便地访问外部资源。在实际项目中,你还可以根据需要定制链接的样式,例如改变颜色、下划线等。总之,理解和掌握这些...

    Android中使用TextView、EditText完成的新闻详情浏览的代码清单.pdf

    在这个例子中,`MainActivity`继承自`Activity`,并且在`onCreate`方法中初始化界面。`findViewById(R.id.tv_link)`用于获取布局文件中ID为`tv_link`的`TextView`。接着,从这个`TextView`中获取文本,并将其转换为`...

    Android中SpannableString类的使用说明.pdf

    本文将详细介绍SpannableString类的使用方法,以及如何通过它来实现丰富的文本效果。 首先,SpannableString类继承自CharSequence接口,这意味着它可以被用作TextView、EditText等控件的文本源。它的核心功能在于...

    牛逼的Android控件

    2. **使用SpannableString**:通过SpannableString和相关Span类(如ForegroundColorSpan、BackgroundColorSpan、URLSpan等),可以实现文本的富文本显示,如部分文字高亮、链接点击等。 3. **绘制文本**:重写`...

    android通过设置文字超链接启动activity

    在Android开发中,我们经常需要实现点击文字后跳转到另一个Activity或执行特定操作,这...通过研究这个示例,你将更好地理解如何在Android中使用`Spannable String`来创建可点击的超链接,从而丰富你的应用交互体验。

    Android-支持部分关键字带下划线可点击的TextView

    通过使用CharacterStyle子类,如UnderlineSpan(添加下划线)和URLSpan(使文本可点击并跳转),我们可以为TextView中的关键字添加这些特性。例如,可以遍历字符串,查找预定义的关键字,并对它们应用合适的Span对象...

    android TextView 连接网络

    总的来说,`android TextView`连接网络是通过`URLSpan`实现的,这允许我们在`TextView`中创建可点击的链接,提升用户体验。通过合理地设置和应用`URLSpan`,开发者可以在文本中无缝集成网络交互功能。

    Android中使用TextView、Button和Toast模拟找回密码的代码清单.pdf

    在`onCreate()`方法中,通过`setContentView(R.layout.activity_main)`加载布局文件,接着通过`findViewById()`方法获取布局中定义的各个组件。 1. `EditText`:在代码中,`edtID`和`edtPss`是两个EditText实例,...

    Android 多样化显示TextView以及扩展Html自定义标签

    3. **自定义标签处理逻辑**:在`handleTag()`方法中,你需要根据标签的开闭标签来处理内容。例如,如果有一个`<mytag>`标签,你可以解析其内容并生成对应的Span对象,然后添加到SpannableStringBuilder中。 4. **...

    android textview 部分文字加颜色并可点击

    总结来说,Android中的TextView可以通过自定义和使用SpannableString、URLSpan等工具来实现部分文字的格式化和交互。这不仅可以提高用户体验,还能在不离开应用的情况下处理链接点击事件,提高应用的可操作性。

    android-TextLinkify,.zip

    本文将深入探讨Android TextLinkify的原理、使用方法以及与之相关的开源项目实践。 TextLinkify是Android SDK中提供的一种便捷方式,用于将TextView中的特定文本格式化为可点击的URL链接。这一功能在显示网页地址、...

    SocialTextView,一个简单的自定义android文本视图,突出显示内容,如提及、标签、电话、电子邮件和url。.zip

    使用SocialTextView的开发者可以通过在布局XML文件中引入这个自定义视图,并通过属性来配置其行为,也可以在代码中实例化并调用相应的设置方法。这种灵活性使得SocialTextView成为了一个实用的工具,可以帮助开发者...

    android main 代码片段

    以上代码片段涉及到了Android开发中常见的几个方面:XML布局设计、Java代码操作UI组件、Activity生命周期管理以及自定义View的使用。通过这些知识点的学习,可以帮助开发者更好地理解和掌握Android应用开发的基本...

    Android中使用文本视图、按钮和Toast实现模拟微信登录及找回密码功能的代码清单.pdf

    总结来说,这个代码清单展示了如何在Android应用中使用基本的UI组件和事件处理来创建一个简单的模拟微信登录和找回密码的功能。文本视图用于展示文本和超链接,按钮用于触发操作,而Toast则提供了用户交互的反馈。...

    Android中捕获TTextView文本中的链接点击事件方法

    1. **创建ClickSpan实例**:在`setLinkClickable`方法中,我们创建一个新的ClickSpan实例,并重写其`onClick`方法。在这里,你可以添加自定义的控制逻辑,比如记录点击事件、弹出对话框或启动新的Activity。 ```...

Global site tag (gtag.js) - Google Analytics