2013-03-18 12 views
5

我一直在努力一段時間了。在需要幫助的活動中:通過點擊註冊,我同意服務條款和隱私政策。 「服務條款」和「隱私政策」部分需要點擊。我找到的解決方案,使網址。但是我不需要網址來瀏覽條款,需要啓動條款活動或隱私活動。使textview的部分點擊(不是網址)

然後我發現這個: https://stackoverflow.com/a/9076448/1387161 但是,這裏的問題是,他們沒有對齊美麗。我的意思是:如果有一個小分辨率的手機,我需要在textview1下面的textview2和textview3旁邊設置textview1,旁邊還有textview4。但是當我使用的應用程序在平板電腦或更大屏幕的手機,也許所有的textviews可以站在旁邊海誓山盟,但佈局保持不變,作爲aphone與小屏幕=

Textview1 - Textview2 Textview3 - Textview4

一個可能的解決方案可以是FlowLayout中,但我發現了錯誤,並似乎無法找到一個很好的教程(初學者) How to use flowlayout (or any custom layout)

任何想法是值得讚賞!

THX,

比約恩

+0

在xml佈局中,只需添加'clickable =「true」'然後像使用按鈕一樣使用'onClick'事件。 – Doomsknight 2013-03-18 11:56:31

+0

你說你不想使用url,你的意思是你想要urls的視覺效果,但打開活動。或者你的意思是你不想讓它看起來像urls? – Guian 2013-03-18 11:58:24

+0

我不想看起來像url的,但開始一個活動,我不想開始瀏覽器 – 2013-03-18 12:25:10

回答

21
public class MainActivity extends Activity { 
TextView _tv; 


/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    _tv = (TextView) findViewById(R.id.textView1); 
    String sentence = "this is [part 1 clickable] and [part 2 clickable] and [part 3 clickable]"; 


    _tv.setMovementMethod(LinkMovementMethod.getInstance()); 
    _tv.setText(addClickablePart(sentence), BufferType.SPANNABLE); 
} 
private SpannableStringBuilder addClickablePart(String str) { 
    SpannableStringBuilder ssb = new SpannableStringBuilder(str); 

    int idx1 = str.indexOf("["); 
    int idx2 = 0; 
    while (idx1 != -1) { 
     idx2 = str.indexOf("]", idx1) + 1; 

     final String clickString = str.substring(idx1, idx2); 
     ssb.setSpan(new ClickableSpan() { 

      @Override 
      public void onClick(View widget) { 
       Toast.makeText(MainActivity.this, clickString, 
         Toast.LENGTH_SHORT).show(); 
      } 
     }, idx1, idx2, 0); 
     idx1 = str.indexOf("[", idx2); 
    } 

    return ssb; 
} 
} 

編輯

public class MainActivity extends Activity { 
TextView _tv; 


/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    _tv = (TextView) findViewById(R.id.textView1); 

    SpannableString ss = new SpannableString("Android is a Software stack"); 

    ss.setSpan(new MyClickableSpan(), 22, 27, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//22 to 27 stack is clickable 
    ss.setSpan(new MyClickableSpan(), 0, 7, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//0 to 7 Android is clickable 

    _tv.setText(ss); 
    _tv.setMovementMethod(LinkMovementMethod.getInstance()); 
} 
class MyClickableSpan extends ClickableSpan{ //clickable span 
    public void onClick(View textView) { 
    //do something 
     Toast.makeText(MainActivity.this, "Clicked", 
      Toast.LENGTH_SHORT).show(); 
    } 
    @Override 
    public void updateDrawState(TextPaint ds) { 
     ds.setColor(Color.GREEN);//set text color 
     ds.setUnderlineText(false); // set to false to remove underline 
    } 
} 
} 

更多信息

您還可以使樣式的spannable串它粗體,斜體或設置字體大小。

StyleSpan boldSpan = new StyleSpan(Typeface.ITALIC); 
    ss.setSpan(boldSpan, 22, 27, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
    StyleSpan boldSpan1 = new StyleSpan(Typeface.BOLD); 
    ss.setSpan(new RelativeSizeSpan(3f), 0, 7, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);//set fontsize 
    ss.setSpan(boldSpan1, 0, 7, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
+0

這很好,但括號是可見的用戶。有沒有解決方法? – 2013-03-18 12:31:06

+1

檢查編輯。 – Raghunandan 2013-03-18 13:31:37

+0

非常感謝! – 2013-03-18 13:38:16

-2

好了,所以你需要做文本視圖點擊的,其簡單。 上ClickableSpan http://developer.android.com/reference/android/text/style/ClickableSpan.html創建的文本視圖對象和呼叫活動,

 termnservc =(TextView)findViewById(R.id.srvid); 
     termnservc.setOnClickListener(this); 
     // use on click method 
        @Override 
       public void onClick(View v) {           
      switch (v.getId()) { 
      case R.id.srvid: 
     Intent termsandcondition=new Intent(this, TermsOfService.class); 
     startActivity(termsandcondition); 
     break; 
        } 

}

1

如果您需要使用Raghunandan答案與HTML郵件時請執行下列操作 在您的多媒體功能

public void displayText(String message) { 

      chapterTextView.setText(Html.fromHtml(message),TextView.BufferType.SPANNABLE); 
      chapterTextView.setMovementMethod(LinkMovementMethod.getInstance()); 
      Spannable clickableMessage = (Spannable) chapterTextView.getText(); 
      chapterTextView.setText(addClickablePart(clickableMessage), BufferType.SPANNABLE); 
} 

addClickablePart

的修正功能
private SpannableStringBuilder addClickablePart(Spannable charSequence) { 
     SpannableStringBuilder ssb = new SpannableStringBuilder(charSequence); 

     int idx1 = charSequence.toString().indexOf("("); 
     int idx2 = 0; 
     while (idx1 != -1) { 
      idx2 = charSequence.toString().indexOf(")", idx1) + 1; 

      final String clickString = charSequence.toString().substring(idx1, idx2); 
      ssb.setSpan(new ClickableSpan() { 

       @Override 
       public void onClick(View widget) { 
        Toast.makeText(getActivity(), clickString, 
          Toast.LENGTH_SHORT).show(); 
       } 
      }, idx1, idx2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
      idx1 = charSequence.toString().indexOf("(", idx2); 
     } 

     return ssb; 
    } 

希望這有助於別人。

0
ClickableSpan cs = new ClickableSpan() { 
    @Override 
    public void onClick(View view) { 
     //action stuff here 
    } 
}; 

String text_terms_string = getResources().getString(R.string.register_terms_text); 
SpannableString ss = new SpannableString(text_terms_string); 

int termStart = text_terms_string.indexOf("Terms"); 
int termStop = termStart + "term".length(); 

//we set here clickable our text 
ss.setSpan(cs, termStart, termStop, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 

//we set here our color i.e. #cccccc in this example I take color from xml 
ss.setSpan(new ForegroundColorSpan(getResources().getColor(R.color.aquaBlue)),termStart,termStop,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 

//we set here text to be bolded  
ss.setSpan(new StyleSpan(Typeface.BOLD),termStart,termStop,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 

//I set here spannable text to my previous declared TextView 
text_terms_link.setText(ss); 

//We set here clickable text, this is important !! 
text_terms_link.setMovementMethod(LinkMovementMethod.getInstance());