2011-09-13 28 views
5

Trong giao diện người dùng của tôi, tôi có một danh sách các tên mà tôi đã hiển thị bằng cách sử dụng Html.fromHtml() do cách đánh dấu tên (xem pic, tên màu đỏ).Cách xử lý các liên kết văn bản HTML trong hoạt động hiện tại

Dưới tên tôi có một ScrollView (xem pic, bit xám). Tôi muốn có thể cuộn đến một phần nhất định của scrollview khi một tên được nhấn.

enter image description here

Vì vậy, tôi loại có một vài miếng để giải quyết ở đây:

  1. Hãy mỗi tên có thể click riêng
  2. Hãy hoạt động hiện tại của tôi xử lý các nhấp chuột
  3. Không gạch chân tên

HOẶC 4. Giải quyết sự cố bố cục bao bì xt sử dụng từng phần xem văn bản riêng lẻ

Tôi biết điều tốt nhất cần làm là tạo từng bản xem văn bản cho mỗi tên NHƯNG nếu tôi làm như vậy tôi mất gói văn bản như trong hình.

Cảm ơn thời gian của bạn.

Edit: Tôi thấy điều này Link nhưng nó sử dụng một ý định vì vậy nó không hoàn toàn giống nhau, tôi không muốn hoạt động khác để xử lý các nhấp chuột, chỉ cần hiện tại.

Trả lời

10

Đây là cách tôi đã thêm hành động onClick vào các từ cụ thể trong một chuỗi văn bản.

main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="#ffffff"> 

    <TextView 
     android:id="@+id/mytextview1" 
     android:textColor="#000000" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_margin="10dp" /> 

</LinearLayout> 

hoạt động chính:

public class HtmlTextLinkTestActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     TextView tv = (TextView) findViewById(R.id.mytextview1); 
     tv.setText("Whale and Lion"); 

     clickify(tv, "Whale", new ClickSpan.OnClickListener() { 
      @Override 
      public void onClick() { 
       Toast.makeText(HtmlTextLinkTestActivity.this, "Whale was clicked!", Toast.LENGTH_SHORT).show(); 
      } 
     }); 

     clickify(tv, "Lion", new ClickSpan.OnClickListener() { 
      @Override 
      public void onClick() { 
       Toast.makeText(HtmlTextLinkTestActivity.this, "Lion was clicked!", Toast.LENGTH_SHORT).show(); 
      } 
     }); 
    } 

    public static void clickify(TextView view, final String clickableText, final ClickSpan.OnClickListener listener) { 
     CharSequence text = view.getText(); 
     String string = text.toString(); 
     ClickSpan span = new ClickSpan(listener); 

     int start = string.indexOf(clickableText); 
     int end = start + clickableText.length(); 
     if (start == -1) return; 

     if (text instanceof Spannable) { 
      ((Spannable)text).setSpan(span, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
     } else { 
      SpannableString s = SpannableString.valueOf(text); 
      s.setSpan(span, start, end, Spanned.SPAN_MARK_MARK); 
      view.setText(s); 
     } 

     MovementMethod m = view.getMovementMethod(); 
     if ((m == null) || !(m instanceof LinkMovementMethod)) { 
      view.setMovementMethod(LinkMovementMethod.getInstance()); 
     } 
    } 
} 

class ClickSpan extends ClickableSpan { 

    private OnClickListener mListener; 

    public ClickSpan(OnClickListener listener) { 
     mListener = listener; 
    } 

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

    public interface OnClickListener { 
     void onClick(); 
    } 

    @Override 
    public void updateDrawState(TextPaint ds) { 
     ds.setColor(0xff0000ff); // remove this if you don't want to want to override the textView's color if you specified it in main.xml 
    } 
} 
+0

bạn có thể gửi câu trả lời của bạn cảm ơn bạn – pengwang

+0

Tôi đã thêm câu trả lời của tôi. – C0deAttack

Các vấn đề liên quan