8

テキストビューの一部に onclick を追加することは可能ですか? たとえば、私のコードは次のようになります。

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

「@Peter」の onClick イベントを追加したいと思います。それは可能ですか?

ティア。

4

5 に答える 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 クラス

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);  
    }        
}
于 2013-01-03T08:27:33.733 に答える
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);  
        }        
    }
于 2013-01-03T10:25:34.973 に答える
4

あなたのXmlにこれを追加してください、android:clickable="true"

あなたの活動では、このように使用します。

textView.setOnClickListener(new View.OnClickListener(){
    public void onClick(){

    }
}
于 2013-01-03T08:25:44.333 に答える
2

これは Java コードを使用して可能です:

someTextView.setOnClickListener(new View.OnClickListener(){
    public void onClick(){
        //Do Stuff
    }
});

ただし、最初にクリック可能に設定していることを確認してください。

someTextView.setClickable(true);
于 2013-01-03T08:24:09.400 に答える
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 に追加します。

setMovementMethod(LinkMovementMethod.getInstance());また、 TextViewを呼び出す必要があります

于 2013-01-03T08:43:55.017 に答える