Android 文本视图上的linkify与文本中的域不工作,链接不可单击

Android 文本视图上的linkify与文本中的域不工作,链接不可单击,android,linkify,Android,Linkify,当字符串显示带有href的域名时,我无法链接带有href的字符串。那就用绳子吧。让我给你看看 以下是字符串: <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> 下面是我如何使链接可点击的: Lin

当字符串显示带有
href
的域名时,我无法
链接带有
href
的字符串。那就用绳子吧。让我给你看看

以下是字符串:

<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>
下面是我如何使链接可点击的:

 Linkify.addLinks(tv_instructions, Linkify.ALL)
 tv_instructions.movementMethod=LinkMovementMethod.getInstance()
但我看到在api 24和27设备上发生的事情,emulator是链接到www.mywebsite.com而不是www.mywebsite/settings

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

它会对用户说:“请转到mywebsite中的“设置”以更改此状态。”

请注意,没有提到.com。我怎样才能把它显示出来。我也试过这样做:

tv_instructions.text=(utils.fromHTML(resources.getString(R.string.go_to_settings),null))
tv_instructions.movementMethod=LinkMovementMethod.getInstance()
文本视图如下所示:

    <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:text="@string/go_to_settings"
               />
 <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"/>

你们知道我做错了什么吗

文本视图上的linkify与文本中的域不工作,链接不可单击

你也可以使用

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

检查下面的示例代码

试试这个

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());
    }


}
文本视图上的linkify与文本中的域不工作,链接不可单击

你也可以使用

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

检查下面的示例代码

试试这个

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());
    }


}

我明白了。出于某种原因,我需要在我的
字符串
文件中使用标记
cData
将文本包装为字符数据。这项工作:

<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>
Java代码

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

我明白了。出于某种原因,我需要在我的
字符串
文件中使用标记
cData
将文本包装为字符数据。这项工作:

<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>
Java代码

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

测试用例
android:autoLink=“web”
我在代码中删除了linkify all中的调用,并按照您在xml中所说的做了。相同的结果您是否在浏览器中打开了链接浏览器中的链接打开良好。测试用例
android:autoLink=“web”
我在代码中删除了linkify all中的调用,并按照您在xml中所说的做了。同样的结果你在浏览器中打开链接了吗链接在浏览器中打开得很好。这也是一个很好的方法,但我不想写代码,+1这也是一个很好的方法,但我不想写代码,+1