如何在Android交换机标签中包含可点击链接?

时间:2015-09-04 03:39:43

标签: android

我的应用程序有一个Switch控件,标签为“我同意条款和条件”。

如何设置条款和条件(而不是其余部分),如链接(蓝色和下划线),并检测点击时间,以便我可以:

一个。在Web浏览器中打开URL,或

湾将新片段弹出到堆栈中?

3 个答案:

答案 0 :(得分:0)

您可以使用this课程。

以下是示例:

String termsAndConditions = "I agree to the Terms and Conditions";

SpannableString spannableString = new SpannableString(termsAndConditions);

int tIndex = signUpText.indexOf('T');

spannableString.setSpan(new ForegroundColorSpan(Color.BLUE), tIndex, termsAndConditions.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

textView.setText(spannableString);

注意:上面的示例将“条款和条件”部分变为蓝色

另外,为了使您的部分文字可以点击,请使用this

修改

mSwitchTermsAndConditions = (Switch) findViewById(R.id.switch_terms_and_conditions);
    mTermsAndConditions = (TextView) findViewById(R.id.terms_and_conditions);

    SpannableString spannableString = new SpannableString("I agree to the Terms and Conditions");

    ClickableSpan linkSpan=new ClickableSpan(){

        @Override public void onClick(View widget){

            //open fragment or webview
        }
        @Override public void updateDrawState(TextPaint ds){
            ds.setUnderlineText(true);
            ds.setColor(Color.BLUE);
        }
    };

    String s = "I agree to the Terms and Conditions";

    int tIndex = s.indexOf('T');

    spannableString.setSpan(linkSpan, tIndex, s.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

    mTermsAndConditions.setText(spannableString);
    mTermsAndConditions.setMovementMethod(LinkMovementMethod.getInstance());

    mSwitchTermsAndConditions.setChecked(false);

<强> XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="horizontal"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">


<Switch
    android:id="@+id/switch_terms_and_conditions"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginRight="10dp"/>

<TextView
    android:id="@+id/terms_and_conditions"
    android:text="I agree to the Terms and Conditions" android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

答案 1 :(得分:0)

您可以使用Linkify类将视图中的文字用作链接。

帖子Linkify your Text!展示了如何让它发挥作用。

基本网络链接直接用于在网络浏览器中打开网址,而如果您想要启动另一个Activity或类似内容,则需要使用在此定义的scheme您活动的意图过滤器。

例如,您可以在视图文本中添加一个链接,其中包含条款和条件,如:

TextView lblTerms = (TextView) findViewById(R.id.lblTerms);
Pattern myPattern = Pattern.compile("Terms and Conditions");
String link = "com.example.myapp://showTermsAndCondition";
Linkify.addLinks(lblTerms, myPattern, link);

这将要求您对目标活动的意图过滤器类似于:

<intent-filter>
    <category android:name="android.intent.category.DEFAULT" />
    <action android:name="android.intent.action.VIEW" />
    <data android:scheme="com.example.myapp" />  
</intent-filter>

现在,当你链接它时,它应该打开你的目标活动。

答案 2 :(得分:0)

使用ClickableSpan处理点击

ClickableSpan policyClick = new ClickableSpan() {
            @Override
            public void onClick(View widget) {
                    openPopUp();
               }

            }
        };

将ClickableSpan设置为SpannableString

String text = "I agree to the Terms and Conditions";
SpannableString policyText = new SpannableString(text);
                policyText.setSpan(clickableSpan, 0, text.length(), 0);
                policyText.setSpan(new ForegroundColorSpan(Color.BLUE), 0, text.length(), 0);
                textView.setMovementMethod(LinkMovementMethod.getInstance());
                textView.setText(policyText, TextView.BufferType.SPANNABLE);