使textview的部分可点击(不是网址)

Bjo*_*ove 6 android android-layout

我已经挣扎了一段时间了.关于有需要的活动文本:点击注册,即表示我同意服务条款和隐私政策."服务条款"和"隐私政策"部分需要是可点击的.我找到的解决方案,制作了网址.但我不需要网址浏览条款,需要启动条款活动或隐私活动.

然后我发现了这个:https: //stackoverflow.com/a/9076448/1387161 但这里的问题是,它们没有对齐美丽.我的意思是:如果有一个分辨率很小的手机,我需要在textview1旁边的textview2和textview3旁边设置textview1,旁边是textview4.但是当我在平板电脑或具有更大屏幕的手机上使用该应用程序时,也许所有的文本视图可以站在彼此旁边,但是布局保持与使用小屏幕的电话相同=

Textview1 - Textview2 Textview3 - Textview4

一个可能的解决方案可以是flowlayout,但我得到错误,似乎找不到一个好的教程(初学者) 如何使用flowlayout(或任何自定义布局)

任何想法都表示赞赏!

谢谢,

比约恩

Rag*_*dan 23

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;
 }
}
Run Code Online (Sandbox Code Playgroud)

编辑

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
    }
}
}
Run Code Online (Sandbox Code Playgroud)

有关ClickableSpan http://developer.android.com/reference/android/text/style/ClickableSpan.html的更多信息

您还可以通过使用粗体,斜体或设置字体大小来设置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 );
Run Code Online (Sandbox Code Playgroud)