textview上的链接与文本中的域无法正常工作,链接无法点击

时间:2018-05-15 05:01:50

标签: android linkify

当字符串显示带有域名的字符串时,我无法company_name带有linkfy的字符串。所以串。让我告诉你。

这是字符串:

href

它会告诉用户:"请转到"设置"在mywebsite.com中更改此状态。 "

这里是<string name="go_to_settings">Please go to "Settings" in <a href="https://www.mywebsite.com/settings">mywebsite.com</a> to change this status</string> 我使用:

textview

以下是我尝试制作链接 <TextView android:id="@+id/tv_instructions" android:layout_width="280dp" android:layout_height="wrap_content" android:layout_marginTop="73dp" android:lineSpacingExtra="3sp" android:textAlignment="center" android:textColor="#5c5c5c" android:textColorLink="@color/action_blue" android:linksClickable="true" android:text="@string/go_to_settings"/>

的方法
clickable

但我看到在api 24和27设备和模拟器上发生链接将转到www.mywebsite.com而不是www.mywebsite / settings

但这是奇怪的事情,如果我更改用户看到的文本并从中删除.com那么它可以正常工作。因此,如果用户看到它,那么它可以工作:

并且会向用户说明这一点:&#34;请转到&#34;设置&#34;在mywebsite中更改此状态。 &#34;

注意没有提到.com。我怎样才能显示这个。我也试过这种方式:

 Linkify.addLinks(tv_instructions, Linkify.ALL)
 tv_instructions.movementMethod=LinkMovementMethod.getInstance()

和textview这样:

tv_instructions.text=(utils.fromHTML(resources.getString(R.string.go_to_settings),null))
tv_instructions.movementMethod=LinkMovementMethod.getInstance()
你知道我做错了什么吗?

2 个答案:

答案 0 :(得分:1)

  

将文本视图与文本中的域无关联,链接无法点击

您也可以使用ClickableSpan

  

如果使用TextView的移动方法将此类型的对象附加到LinkMovementMethod的文本,则可以选择受影响的文本范围。如果选中并单击,则会调用onClick(View)方法。

检查以下SAMPLE CODE

试试这个

public class MainActivity extends AppCompatActivity {

    TextView myTextView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        myTextView = (TextView) findViewById(R.id.myTextview);

        setSpan();
    }

    private void setSpan() {

        SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder("Please go to \"Settings\" in");
        SpannableString spannableString = new SpannableString(" mywebsite.com ");

        ClickableSpan clickableSpan = new ClickableSpan() {
            @Override
            public void onClick(View textView) {
                Toast.makeText(MainActivity.this, "Click", Toast.LENGTH_SHORT).show();
                // you can open your link here as per your requiremnt
            }
        };

        spannableString.setSpan(clickableSpan, 0, spannableString.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        spannableString.setSpan(new UnderlineSpan(), 0, spannableString.length(), 0);

        spannableStringBuilder.append(spannableString);
        spannableStringBuilder.append("to change this status");

        myTextView.setText(spannableStringBuilder);
        myTextView.setMovementMethod(LinkMovementMethod.getInstance());
    }


}

答案 1 :(得分:1)

想出来了。出于某种原因,我需要使用我的cData文件中的标记strings将我的文本包装为字符数据。这有效:

<string name="go_to_settings"><![CDATA[Please go to "Settings" in <a href="https://www.mywebsite.com/settings">mywebsite.com</a> to change this status :]]></string>

然后textview看起来像这样:

 <TextView
      android:id="@+id/tv_instructions"
      android:layout_width="280dp"
      android:layout_height="wrap_content"
      android:layout_marginTop="73dp"
      android:lineSpacingExtra="3sp"
      android:text="@string/go_to_settings"
      android:textAlignment="center"
      android:textColor="#5c5c5c"
      android:textColorLink="@color/action_blue"/>

Java代码

tv_instructions.text=(utils.fromHTML(resources.getString(R.string.go_to_settings),null))
tv_instructions.movementMethod=LinkMovementMethod.getInstance()