TextView - 点击事件 - Android

8

有没有可能在TextView的某个部分添加onclick事件?例如,我的代码如下:

String content = "Hello this a test.. For more details contact @Peter";
someTextView.setText(content);

我想为“@Peter”添加一个onClick事件,这可行吗?谢谢。

你想要给整个TextView添加onclick还是只给**@Peter**添加? - Renjith
这可能会有所帮助:https://dev59.com/6nE85IYBdhLWcg3whT5r 或者您可以使用Spannables和IntentSpan来完成。 - Thommy
@RKN 为仅限于 @Peteronclick 添加代码。 - Naveen
5个回答

7
简单:-)
SpannableString link = makeLinkSpan("@Peter", new View.OnClickListener() {          
        @Override
        public void onClick(View v) {
            // Peforme Click
        }
    });
String content = "Hello this a test.. For more details contact";
someTextView.setText(content);
someTextView.append(link);

makeLinkSpan() 方法是:

private SpannableString makeLinkSpan(CharSequence text, View.OnClickListener listener) {
    SpannableString link = new SpannableString(text);
    link.setSpan(new ClickableString(listener), 0, text.length(), 
        SpannableString.SPAN_INCLUSIVE_EXCLUSIVE);
    return link;
}

ClickableString Class

private static class ClickableString extends ClickableSpan {  
    private View.OnClickListener mListener;          
    public ClickableString(View.OnClickListener listener) {              
        mListener = listener;  
    }          
    @Override  
    public void onClick(View v) {  
        mListener.onClick(v);  
    }        
}

现在,您仅拥有“@Peter”文本的Click事件。并没有针对整个TextView。这意味着您的单词@Peter被链接了。 - user370305

5

感谢@user370305的回答。然而,他的回答中遗漏了一些代码片段。为了使其他人受益,我将粘贴整个对我有效的代码:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView someTextView = (TextView)findViewById(R.id.someTextView);

        String content = "Hello this a test.. For more details contact";
        someTextView.setText(content);

        SpannableString link = makeLinkSpan("@Peter", new View.OnClickListener() {          
                @Override
                public void onClick(View v) {
                    //Do something here..
                }
            });
            someTextView.append(link); 
        }
        makeLinksFocusable(someTextView);
    }

    private void makeLinksFocusable(TextView tv) {
        MovementMethod m = tv.getMovementMethod();  
        if ((m == null) || !(m instanceof LinkMovementMethod)) {  
            if (tv.getLinksClickable()) {  
                tv.setMovementMethod(LinkMovementMethod.getInstance());  
            }  
        }  
    }

    private SpannableString makeLinkSpan(CharSequence text, View.OnClickListener listener)                 {
        SpannableString link = new SpannableString(text);
        link.setSpan(new ClickableString(listener), 0, text.length(), 
            SpannableString.SPAN_INCLUSIVE_EXCLUSIVE);
        return link;
    }

    private static class ClickableString extends ClickableSpan {  
        private View.OnClickListener mListener;          
        public ClickableString(View.OnClickListener listener) {              
            mListener = listener;  
        }          
        @Override  
        public void onClick(View v) {  
            mListener.onClick(v);  
        }        
    }

4
在你的Xml中添加以下内容:android:clickable="true" 在你的Activity中使用如下代码:
textView.setOnClickListener(new View.OnClickListener(){
    public void onClick(){

    }
}

1
这将为整个TextView添加点击事件。我想只为某些部分添加点击事件。在上述情况中,是为了**@Peter**。 - Naveen
@Peter:请参考此链接,希望对你有所帮助 http://adilatwork.blogspot.in/2011/07/android-how-to-make-only-part-of.html - Aerrow

2
这可以使用Java代码实现:
someTextView.setOnClickListener(new View.OnClickListener(){
    public void onClick(){
        //Do Stuff
    }
});

但首先请确保您将其设置为可点击。

someTextView.setClickable(true);

2
我想要对TextView的某一部分进行onclick,而不是对整个TextView进行操作。 - Naveen

1

试试这个:

SpannableString str = new SpannableString("@Peter");
str.setSpan(new ClickableSpan() {

            @Override
            public void onClick(View widget) {
                // TODO Auto-generated method stub

            }
        }, 0, str.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

然后将str附加到您的TextView上。

您还需要在TextView上调用setMovementMethod(LinkMovementMethod.getInstance());


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接