从 strings.xml 获取可点击的 URL 用于共享 Intent Android Studio
Getting a clickable URL from strings.xml for a share Intent Android Studio
我已经搜索了几个小时,试图让我的分享 Intent 成为指向特定 URL 的超链接。我看到了很多关于 TextView 的答案,但 none 是为了共享意图,我无法弄清楚如何将 textView 答案应用于此。
基本上我想要这个字符串
<string name="link"><a href="https://play.google.com/store/apps/details?blahblah">EatingOut</a></string>
一起工作
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_restaurant);
share = getString(R.string.link);
}
private void setShareIntent() {
if (mShareActionProvider != null) {
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_SUBJECT, "Share");
shareIntent.putExtra(Intent.EXTRA_TEXT, "Eating at "+ title.getText() + " #" + share );
mShareActionProvider.setShareIntent(shareIntent);
}
}
问题是当我分享它时,"share" 部分没有超链接。
我已经尝试了很多不同的建议,但就像我说的,大多数都是针对 textViews
编辑:尝试了 TextUtils.concat 但仍然没有带和不带“#”的超链接
CharSequence socialShare = TextUtils.concat("Eating at ", title.getText(), " #", share);
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_SUBJECT, "Share");
shareIntent.putExtra(Intent.EXTRA_TEXT, socialShare );
The problem is when I share it, there is no hyperlink to the "share" part.
你这里有一些问题。
首先,我不知道 <a>
是可以在字符串资源中使用的有效 HTML 风格的标签。
其次,getString()
将删除 HTML 样式的标记,即使它存在。
第三,您正在将 ACTION_SEND
Intent
的 MIME 类型设置为 text/plain
,而 HTML 是不同的 MIME 类型。
考虑到所有这些,您需要决定是否要与文本中的 URL 共享纯文本(依靠 "share" 收件人来识别 URL并使其对用户有用(如果适用)),或者如果您要分享 HTML(并希望 "share" 收件人不要把事情搞砸了)。
如果您要共享纯文本,请将您的字符串资源更改为:
<string name="link">https://play.google.com/store/apps/details?blahblah</string>
您还需要删除连接字符串中的 #
,或者在其后添加 space,将 #
放在 [=50= 之前] 可能会混淆其他应用程序,导致它们无法将 URL 识别为 URL。
如果您要分享 HTML,您需要将 setType()
更改为传递 text/html
,然后将 EXTRA_TEXT
设置为 HTML -格式化的字符串或 Spanned
对象(例如,通过 SpannableStringBuilder
创建)。
我已经搜索了几个小时,试图让我的分享 Intent 成为指向特定 URL 的超链接。我看到了很多关于 TextView 的答案,但 none 是为了共享意图,我无法弄清楚如何将 textView 答案应用于此。
基本上我想要这个字符串
<string name="link"><a href="https://play.google.com/store/apps/details?blahblah">EatingOut</a></string>
一起工作
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_restaurant);
share = getString(R.string.link);
}
private void setShareIntent() {
if (mShareActionProvider != null) {
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_SUBJECT, "Share");
shareIntent.putExtra(Intent.EXTRA_TEXT, "Eating at "+ title.getText() + " #" + share );
mShareActionProvider.setShareIntent(shareIntent);
}
}
问题是当我分享它时,"share" 部分没有超链接。 我已经尝试了很多不同的建议,但就像我说的,大多数都是针对 textViews
编辑:尝试了 TextUtils.concat 但仍然没有带和不带“#”的超链接
CharSequence socialShare = TextUtils.concat("Eating at ", title.getText(), " #", share);
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_SUBJECT, "Share");
shareIntent.putExtra(Intent.EXTRA_TEXT, socialShare );
The problem is when I share it, there is no hyperlink to the "share" part.
你这里有一些问题。
首先,我不知道 <a>
是可以在字符串资源中使用的有效 HTML 风格的标签。
其次,getString()
将删除 HTML 样式的标记,即使它存在。
第三,您正在将 ACTION_SEND
Intent
的 MIME 类型设置为 text/plain
,而 HTML 是不同的 MIME 类型。
考虑到所有这些,您需要决定是否要与文本中的 URL 共享纯文本(依靠 "share" 收件人来识别 URL并使其对用户有用(如果适用)),或者如果您要分享 HTML(并希望 "share" 收件人不要把事情搞砸了)。
如果您要共享纯文本,请将您的字符串资源更改为:
<string name="link">https://play.google.com/store/apps/details?blahblah</string>
您还需要删除连接字符串中的 #
,或者在其后添加 space,将 #
放在 [=50= 之前] 可能会混淆其他应用程序,导致它们无法将 URL 识别为 URL。
如果您要分享 HTML,您需要将 setType()
更改为传递 text/html
,然后将 EXTRA_TEXT
设置为 HTML -格式化的字符串或 Spanned
对象(例如,通过 SpannableStringBuilder
创建)。