`
eidolon
  • 浏览: 40819 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

让 TextView 的事件响应支持 Intent

阅读更多

按上一篇的方式可以给 TextView 加上事件响应,然而仅限于 web、email、phone、map等几种,如果希望在点击后跳转到自己的 Activity 要怎么实现呢?看代码吧!

 

这是 Activity 代码:

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);

        linkify = new LinkifyUtil(this);
        Intent intent = new Intent("com.example.android.note.ADD");
        intent.setData(Uri.parse("content://com.example.android.note/item"));
        
        linkify.addIntentLink(intent, (TextView) findViewById(R.id.tv_new_item));
    }

 

这是 LinkifyUtil 类:

package com.example.android.note.util;

import android.app.Activity;
import android.content.Intent;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.method.LinkMovementMethod;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;

/**
 *
 * @author eidolon
 */
public class LinkifyUtil {
    private final Activity currentActivity;

    public LinkifyUtil(Activity activity) {
        this.currentActivity = activity;
    }

    public void addIntentLink(final Intent intent, final TextView view, final int start, final int end) {
        CharSequence source = view.getText();
        if (source instanceof Spanned) {
            IntentSpan[] spans = ((Spanned) source).getSpans(start, end, IntentSpan.class);
            if (spans.length > 0) {
                return;
            }
        }
        
        SpannableString spannableString = new SpannableString(source);
        spannableString.setSpan(new IntentSpan(new OnClickListener() {

            public void onClick(View view) {
                currentActivity.startActivity(intent);
            }
        }), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        
        view.setText(spannableString);
        view.setMovementMethod(LinkMovementMethod.getInstance());
    }

    public void addIntentLink(final Intent intent, final TextView view) {
        addIntentLink(intent, view, 0, view.getText().toString().length());
    }
}

 

最后是 IntentSpan 类:

package com.example.android.note.util;

import android.text.style.ClickableSpan;
import android.view.View;
import android.view.View.OnClickListener;

/**
 *
 * @author eidolon
 */
public class IntentSpan extends ClickableSpan {

    private final OnClickListener listener;

    public IntentSpan(View.OnClickListener listener) {
        this.listener = listener;
    }

    @Override
    public void onClick(View view) {
        listener.onClick(view);
    }
}
 

 

2
2
分享到:
评论

相关推荐

    textview文字样式包含部分文字事件

    `setMovementMethod(LinkMovementMethod.getInstance())`这一步非常重要,它使得`TextView`能够识别并响应`ClickableSpan`,否则点击事件不会生效。 总结来说,`TextView`通过`SpannableString`和`StringBuilder`的...

    Android TextView中链接的实现

    首先,让我们了解TextView的基本用法。TextView是Android布局中的一个视图元素,它用于显示单行或多行的文本。通过XML布局文件或代码动态创建,可以设置字体、颜色、大小等属性。要使TextView中的文本成为可点击的...

    Android给TextView添加点击事件的实现方法

    为了响应TextView的点击事件,我们需要为其设置一个OnClickListener。在Java代码中,可以通过匿名内部类的方式实现: ```java textView.setOnClickListener(new OnClickListener() { @Override public void ...

    TextView中文字超链接,点击启动另一个Activity 源码

    `setMovementMethod`方法使TextView能响应链接的点击事件。 当用户点击链接时,系统会解析Intent并尝试启动对应的Activity。在`AndroidManifest.xml`中,你需要为这个Intent声明一个接收者: ```xml <intent-...

    android textview 部分文本变色,点击跳转

    在Android开发中,`TextView`是用于展示文本的常用组件,但有时我们希望部分文本具有不同的样式,比如颜色不同,甚至能响应用户的点击事件,跳转到特定的链接。这通常涉及到`SpannableString`、`ClickableSpan`等...

    textview网页链接

    首先,TextView支持HTML格式的文本,这意味着我们可以使用HTML标签来格式化文本,包括插入链接。例如,如果要显示一段包含链接的文本,可以这样做: ```java String htmlText = "<a href='http://www.example.com'>...

    Android开发之TextView使用intent传递信息,实现注册界面功能示例

    本文详细介绍了如何使用 Intent 传递信息,实现注册界面功能,包括 Intent 传递信息、TextView 控件、Activity 之间的信息传递、布局文件的设计、Button 控件的使用、EditText 控件的使用、Intent.putExtras() 方法...

    TextView超链接启动Activity,无下划线,可自定义颜色

    `setMovementMethod`用于使TextView可以响应点击事件。 如果你想要对多个超链接进行处理,可以使用`Html.fromHtml()`方法配合HTML标签来设置文本,然后再使用`Linkify.addLinks()`来识别和转换这些链接。例如: ``...

    Android学习笔记--Activity中使用Intent传值示例代码

    这里的intent-filter定义了Activity可以响应的Intent类型。在这个例子中,我们没有特别定义ACTION和CATEGORY,因为我们的Intent是在代码中明确指定目标Activity的,所以不需要这部分配置。 总之,Intent在Android...

    02_基本UI的控制和响应

    除了控件级别的事件外,Android还支持对设备本身的事件进行响应,例如屏幕旋转、键盘弹出/隐藏等。 1. **屏幕旋转**: - 当设备方向发生变化时,系统会自动调整屏幕布局。开发者可以通过覆盖`...

    Android移动应用开发之接收短信读取并显示在TextView

    在AndroidManifest.xml文件中,我们需要声明一个BroadcastReceiver,并指定ACTION_SMS_RECEIVED Intent过滤器,以便系统知道我们的应用对短信事件感兴趣。 ```xml <intent-filter android:priority="999"> </...

    Android开发之旅 Intents和Intent Filters(实例部分)(免费)

    `Intent Filters`则是定义在组件(如Activity、Service或Broadcast Receiver)中的一种规则集合,用于匹配接收到的`Intents`,决定哪些组件可以响应特定的`Intent`。 #### 实例分析:从通讯录中选择联系人并发送...

    Android开发技巧之在a标签或TextView控件中单击链接弹出Activity(自定义动作)

    Intent intent = new Intent(Intent.ACTION_VIEW, uri); intent.putExtra(Browser.EXTRA_APPLICATION_ID, context.getPackageName()); context.startActivity(intent); } ``` 这个方法中,URLSpan获取href属性,...

    android基本UI的控制和响应

    除了UI控件中的事件外,Android还支持对设备本身的事件进行响应,例如传感器数据的变化、网络连接状态的变化等。这些事件通常通过注册监听器或者使用系统服务的方式进行处理。 #### 四、屏幕间的跳转和事件的传递 ...

    漂亮的 text view 简易导航栏

    3. **监听事件**:添加OnClickListener监听器,当用户点击TextView时,触发相应的方法,如切换页面或更新数据。 4. **实现页面切换**:根据用户选择的选项,利用Fragment或Activity的栈管理(如FragmentManager或...

    Android编程开发之TextView单击链接弹出Activity的方法

    6. 应用LinkMovementMethod:调用`setMovementMethod`方法,传入`LinkMovementMethod.getInstance()`,使得TextView能够响应点击事件。 7. 显示文本:最后,将`SpannableString`对象设置为TextView的文本。 以下是...

    可点击触发事件的widget效果

    一个基本的Widget通常包含一个或多个布局元素,如ImageView、TextView或者Button。在这个例子中,我们可能会看到一个或多个Button,因为它们是最常见的可点击元素,可以触发用户事件。 为了使Widget具有点击事件,...

    MyWidget(点击事件+更新视图).rar

    8. **Broadcast Intent Filter**: 在AndroidManifest.xml中,我们需要为AppWidgetProvider添加对应的Intent Filter,以便系统能正确识别和处理Widget的点击事件。 9. **Android 广播**: 广播是Android系统中一种...

    04、事件和活动v41

    事件处理机制是Android系统用于响应用户操作的一种方式,通常涉及到事件源(Event Source)、事件监听器(Event Listener)和事件处理器(Event Handler)。 事件处理机制的基本工作原理是将事件监听器绑定到事件源,当...

Global site tag (gtag.js) - Google Analytics