Как добавить пользовательский текст вместо URL-адреса в сообщении Deeplink

Я интегрирую Firebase для поддержки функции Deeplink в приложении. В приведенном ниже примере экрана (PFA) я увидел, что мы можем добавить собственный текст вместо отображения URL Deep link.

введите описание изображения здесь

Я пытался обновить, но это не помогло. Как это сделать, любое предложение?

Ответ 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-ответов, которые, похоже, хорошо справляются с этой темой:

Сделать гипертекстовое текстовое отображение в андроиде

От пользователя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));

Поместите ссылку html в edittext android

От RobinHood:

Поместите свой html в строку @

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

установите String в editText @

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

Для клика установите LinkMovementMethod с необходимым действием @

youredittext.setMovementMethod(LinkMovementMethod.getInstance());

Если вы пытаетесь выполнить это в HTML, используйте тег anchor (a):

<p>Click on this <a href="https://stackoverflow.com/">Link</a></p>

Ответ 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_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="@dimen/margin"
    tools:context="tdsolutions.com.clickabletext.MainActivity">

    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World this text" />

</LinearLayout>

Передайте текстовое изображение ниже метода (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_width="wrap_content"
        android:layout_height="wrap_content" />

затем добавьте ниже код:

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 <a href=\"http://www.google.com\">this</a> link";