当字符串显示带有域名的字符串时,我无法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()
你知道我做错了什么吗?
答案 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()