在 textview 上链接,文本中的域不起作用,链接不可点击
Posted
技术标签:
【中文标题】在 textview 上链接,文本中的域不起作用,链接不可点击【英文标题】:linkify on textview with domain in text not working, links not clickable 【发布时间】:2018-10-24 20:10:36 【问题描述】:当字符串表示域名时,我无法linkfy
带有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>
它会对用户说:“请转到 mywebsite.com 中的“设置”以更改此状态。”
这是我正在使用的textview
:
<TextView
android:id="@+id/tv_instructions"
android:layout_
android:layout_
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
:
Linkify.addLinks(tv_instructions, Linkify.ALL)
tv_instructions.movementMethod=LinkMovementMethod.getInstance()
但我看到在 api 24 和 27 设备和模拟器上发生的情况是链接将转到 www.mywebsite.com 而不是 www.mywebsite/settings
但奇怪的是,如果我更改用户看到的文本并从中删除 .com,那么它就可以正常工作。因此,如果用户看到它,它会起作用:
它会对用户说:“请转到我的网站中的“设置”以更改此状态。”
注意这里没有提到 .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_
android:layout_
android:layout_marginTop="73dp"
android:lineSpacingExtra="3sp"
android:textAlignment="center"
android:textColor="#5c5c5c"
android:text="@string/go_to_settings"
/>
你们知道我做错了什么吗?
【问题讨论】:
测试用例android:autoLink="web"
我在代码中删除了所有链接中的调用,并按照您在 xml 中所说的进行了操作。结果相同
您是否在浏览器中打开了链接
链接在浏览器中打开正常。
【参考方案1】:
想通了。出于某种原因,我需要在我的strings
文件中使用标签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>
那么textview
看起来像这样:
<TextView
android:id="@+id/tv_instructions"
android:layout_
android:layout_
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()
【讨论】:
唯一对我有用的东西。这是。添加 CDATA !!【参考方案2】:在 textview 上链接,文本中的域不起作用,链接不可点击
你也可以使用ClickableSpan
如果此类型的对象以
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());
【讨论】:
这也是一个不错的方法但是我不想写代码,+1以上是关于在 textview 上链接,文本中的域不起作用,链接不可点击的主要内容,如果未能解决你的问题,请参考以下文章