如何在 Deeplink 消息中添加自定义文本而不是 URL

Posted

技术标签:

【中文标题】如何在 Deeplink 消息中添加自定义文本而不是 URL【英文标题】:How to add Custom Text instead of URL in Deeplink message 【发布时间】:2017-05-07 20:00:26 【问题描述】:

我正在集成 Firebase 以支持应用中的 Deeplink 功能。我在其中一个屏幕示例建议(PFA)here 中看到,我们可以添加自己的自定义文本,而不是显示深层链接 URL。

我已尝试更新,但没有帮助。怎么做,有什么建议吗?

【问题讨论】:

看起来他们只是在使用锚标记中的链接创建 html 这看起来一样。但我不知道如何在 Deep Link SMS 文本消息中做。我只想显示一些超链接文本,而不是完整 URL。有什么建议吗? 我不认为在这个例子中它是短信,据我所知短信不是由 HTML 格式化的,所以不可能这样做。 我同意@riggaroo,我不认为屏幕截图是短信,因为该应用程序允许用户发送位置、语音和图像。那只是另一个消息传递应用程序。 original screenshot here 【参考方案1】:

我的猜测是您在用户输入文本时使用UITextView(在 ios 中)。以下是如何在 Swift 中实现这一点:

class ViewController: UIViewController 

    @IBOutlet weak var textView: UITextView!
    @IBOutlet weak var textField: UITextField!

    override func viewDidLoad() 
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    

    override func didReceiveMemoryWarning() 
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    

    @IBAction func buttonPress(_ sender: Any) 
        let range = textView.selectedRange
        let linkString = NSMutableAttributedString(string: textView.text)
        linkString.addAttribute(NSLinkAttributeName, value: textField.text ?? "", range: range)
        textView.attributedText = linkString
    



extension ViewController: UITextViewDelegate 
    func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool 
        UIApplication.shared.open(URL, options: [:], completionHandler: nil)
        return false
    

android 中,我发现了一些似乎很好地处理该主题的 SO 答案:

Make a hyperlink textview in android

来自用户 370305:

试试这个,让我知道会发生什么..

TextView textView =(TextView)findViewById(R.id.textView);
textView.setClickable(true);
textView.setMovementMethod(LinkMovementMethod.getInstance());
String text = "<a href='http://www.google.com'> Google </a>";
textView.setText(Html.fromHtml(text));

Put html link in edittext android

来自罗宾汉:

把你的html放在一个字符串中@

<string url="link">&lt;a href="http://www.google.com">Google&lt;/a></string>

设置字符串为editText@

youredittext.setText(Html.fromHtml(getResources().getString(R.string.url)));

对于点击,使用必要的操作设置 LinkMovementMethod@

youredittext.setMovementMethod(LinkMovementMethod.getInstance());

如果您尝试在 HTML 中完成此操作,请使用锚 (a) 标记:

&lt;p&gt;Click on this &lt;a href="https://***.com/"&gt;Link&lt;/a&gt;&lt;/p&gt;

【讨论】:

Caleb,我说的不是创建超链接。我们如何将深层链接转换为超链接文本并发送短信通知。有什么建议吗? @Shubh 对不起。我对你想要什么有点困惑。你能再解释一下吗? 在深层链接短信文本中,我想用超链接小文本替换深层链接 URL。【参考方案2】:

我在我的一个应用程序中做了同样的事情。请遵循以下代码。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_
    android:layout_
    android:layout_margin="@dimen/margin"
    tools:context="tdsolutions.com.clickabletext.MainActivity">

    <TextView
        android:id="@+id/text"
        android:layout_
        android:layout_
        android:text="Hello World this text" />

</LinearLayout>

将您的 Textview 传递给以下方法(setClickableText):

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

  TextView text = (TextView) findViewById(R.id.text);
  setClickableText(text);


private void setClickableText(TextView textView) 
        String text = "this"; // the text you want to mark as a link

        SpannableString ss = new SpannableString(textView.getText());// full text
        final ForegroundColorSpan fcs = new ForegroundColorSpan(Color.parseColor("#91ca46"));//link text color

        ClickableSpan clickableSpan = new ClickableSpan() 
            @Override
            public void onClick(View textView) 
                //What ever the code you want when click on text goes here
                Toast.makeText(MainActivity.this,"you clicked",Toast.LENGTH_LONG).show();
            

            @Override
            public void updateDrawState(TextPaint ds) 
                super.updateDrawState(ds);
                ds.setUnderlineText(false);
            
        ;

        int start = textView.getText().toString().indexOf(text);
        int length = start + text.length();

        ss.setSpan(clickableSpan, start, length, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
        ss.setSpan(fcs, start, length, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
        textView.setText(ss);
        textView.setMovementMethod(LinkMovementMethod.getInstance());
        textView.setHighlightColor(Color.TRANSPARENT);
    

或者你可以使用下面的代码:

如下添加文本视图,随意更改属性。

   <TextView
        android:id="@+id/textView"
        android:layout_centerInParent="true"
        android:linksClickable="true"
        android:textColorLink="#00f"
        android:layout_
        android:layout_ />

然后添加以下代码:

TextView textView = (TextView) findViewById(R.id.textView);
Spanned result;
String html = "Hi sweetheart go to <a href=\"http://www.google.com\">this</a> link";
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) 
    result = Html.fromHtml(html ,Html.FROM_HTML_MODE_LEGACY);
 else 
    result = Html.fromHtml(html);

textView.setText(result);
textView. setMovementMethod(LinkMovementMethod.getInstance());

请确保在添加链接时将它们替换为 html 标签,就像我在示例 String html = "Hi sweetheart go to &lt;a href=\"http://www.google.com\"&gt;this&lt;/a&gt; link"; 中所做的那样

【讨论】:

@TdSoft 不是这种情况。我在问我们是否可以显示超链接文本而不是显示深层链接 URL。有什么线索吗? 但是如果你发短信,这将不起作用。它将 HTML 标记视为纯文本,因此不会创建超链接文本。

以上是关于如何在 Deeplink 消息中添加自定义文本而不是 URL的主要内容,如果未能解决你的问题,请参考以下文章

如何在 obiee 11g/12c 中添加自定义消息?

如何在运输方式(后端)中添加自定义描述字段

如何在 Facebook 应用邀请对话框中添加预定义文本? (安卓)

在Windows登录中登录失败后添加自定义错误消息

MFC如何改变消息框的三个按钮的文本值

如何在 Win32 API 的对话框中显示自定义消息?