如何将TextView的某些文本链接到活动?

时间:2016-08-09 08:45:31

标签: android

我想将TextView上的某些文字与Activity相关联。这是我的TextView:

<TextView
     android:id="@+id/termsLink"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:text="@string/terms"
     android:layout_weight="4"/>

其中@string/terms是:

<string name="terms">Accept <a href="#">terms & conditions.</a>.</string>

如果我有一个指向网页的链接,我会这样做:

TextView link = (TextView) findViewById(R.id.termsLink);
link.setMovementMethod(LinkMovementMethod.getInstance());

但是当我按下链接时,我不知道如何启动活动,因为它是真正的链接(链接网页)。

编辑:请注意,我不必在全文中处理onClick事件,因为该链接仅位于"terms & conditions"部分。

编辑2:我尝试使用评论中建议的两个TextView和下面的一个答案来达到同样的效果。但有时候(取决于屏幕)"terms & conditions"部分占用两行,因为它没有在可用空间上正确填充,所以第二行显示在第二行TextView而不是在第二行Accept terms & conditions. 上第二行。

效果类似于:

Accept terms &
conditions.

我希望它会是这样的:

//Right here is where I would add the array containing the elements.

提前致谢!

3 个答案:

答案 0 :(得分:1)

使用内部onClick侦听器

创建一个帮助器类
public class ClickSpan extends ClickableSpan {

    private String url;
    private OnClickListener listener;

    public ClickSpan(String url, OnClickListener listener) {
        this.url = url;
        this.listener = listener;
    }

    @Override
    public void onClick(View widget) {
        if (listener != null) listener.onClick(url);
    }

    public interface OnClickListener {
        void onClick(String url);
    }
}

然后将现有范围转换为可点击的范围

public static Spannable createClickableSpans(Spanned original,     ClickSpan.OnClickListener listener) {
    SpannableString result = new SpannableString(original);
    URLSpan[] spans = result.getSpans(0, result.length(), URLSpan.class);

    for (URLSpan span : spans) {
        int start = result.getSpanStart(span);
        int end = result.getSpanEnd(span);
        int flags = result.getSpanFlags(span);

        result.removeSpan(span);
        result.setSpan(new ClickSpan(span.getURL(), listener), start, end, flags);
    }

    return result;
}

因此,最终用法就像

TextView link = (TextView) findViewById(R.id.termsLink);
link.setMovementMethod(LinkMovementMethod.getInstance());
link.setText(createClickableSpans((Spanned)link.getText(), new ClickSpan.OnClickListener(){
    @Override
    public void onClick(String url){
        //Handle click
    }
});

答案 1 :(得分:0)

你应该把文本分成2个文本视图,一个是条款和条件,另一个只是接受。它会使事情变得更清晰,更容易。以下TextView假设它只是接受。     

在布局中对应的java类(例如:activity_main - &gt; MainActivity):

public void start_activity(View view){
   Intent newActivityIntent = new Intent(this,NewActivity.class);
   startActivity(newActivityIntent);
}

NewActivity.class只是您要开始的活动的名称。

public class MainActivity extends AppCompatActivity {

    protected void onCreate(Bundle savedInstanceState) {
         ....
    }

    public void start_activity(View view){
         .....
    } 
}

答案 2 :(得分:0)

要使仅部分TextView可点击,您可以在TextView中使用 spannable 并设置 onClick 事件侦听器。从这里开始,您可以照常启动活动。您可以通过指定字符位置(从头到尾)

来限制文本的可单击部分

通过@ becomputer06

查看此答案

How to set the part of the text view is clickable