Android Dev, как подчеркнуть и изменить цвет слова в строке, как цвет ссылки - PullRequest
0 голосов
/ 10 февраля 2011

У меня есть приложение, которое получает строку из базы данных и устанавливает метку.Теперь я хочу, чтобы этот ярлык подчеркивал одно слово, такое как «Это слово должно быть подчеркнуто».и я хочу иметь возможность нажать на это подчеркивание слово и получить его значение.Так что я должен настроить его до отправки в базу данных или после.Спасибо за любую помощь.Я попробовал код ниже, и каждая строка подсвечивается из-за цикла for.пожалуйста помогите

SpannableStringBuilder builder = new SpannableStringBuilder();
            for(int i=0;i<ListClass.getLatestActivity().size();i++){
                String myString  = ListClass.getLatestActivity().get(i);
                builder.append(myString);
                String substringThatShouldBeClickable = myString.substring(0,myString.indexOf(' ')).trim();
                MySpan span = new MySpan(substringThatShouldBeClickable);
                span.setOnMySpanClickListener(mySpanOnClickListener);

                int start = 0;
                int end = builder.length();

                builder.setSpan(span, start, end, 0);
                builder.append("\n" + "\n") ;
            }
            RAInfo.setText(builder);    
            RAInfo.setMovementMethod(LinkMovementMethod.getInstance());

1 Ответ

1 голос
/ 10 февраля 2011

Хорошо, так что вам нужно сделать несколько вещей. Они могут сделать это с помощью диапазона внутри TextView.

Сначала вам понадобится класс, расширяющий ClickableSpan:

public class MySpan extends ClickableSpan {
    public interface OnMySpanClickListener {
            public void onMySpanClick(String tag);
    }

    private final String myData;
    private OnMySpanClickListener mOnMySpanClickListener;

    public MySpan(String tag) {
            super();
            if (tag == null) {
                    throw new NullPointerException();
            }
            myData = tag;
    }

    @Override
    public void onClick(View widget) {
            if (mOnMySpanClickListener != null) {
                mOnMySpanClickListener.onMySpanClick(myData);
            }
    }

    public OnMySpanClickListener getOnMySpanClickListener() {
            return mOnMySpanClickListener;
    }

    public void setOnMySpanClickListener(OnMySpanClickListener onMySpanClickListener) {
            mOnMySpanClickListener = onMySpanClickListener;
    }
}

В своей Деятельности вы установите текст TextView так:

String myString = getFromDatabase();    

SpannableStringBuilder builder = new SpannableStringBuilder();
builder.append(myString);

//You'll need to call the constructor for MySpan with only the value of the part
//of the string that you want to work with ("Bob" in the example), however you 
//determine that.
String substringThatShouldBeClickable = getMySubstring(myString);  //"Bob"
MySpan span = new MySpan(substringThatShouldBeClickable);
span.setOnMySpanClickListener(mySpanOnClickListener);

//start and end control the range of characters in the string that are clickable,
//so modify this part so it only underlines the characters you want clickable
int start = 0;
int end = bulider.length();

builder.setSpan(span, start, end, 0);

label.setText(builder);
label.setMovementMethod(LinkMovementMethod.getInstance());

Наконец, вам понадобится обработчик для событий щелчка на промежутке:

MySpan.OnMySpanClickListener mySpanOnClickListener = new MySpan.OnMySpanClickListener() {
    public void onMySpanClick(String tag) {
        //Here is where you'll do your work with the value in the String "tag"
    }
};

Надеюсь, это поможет.

...