android - profundo - react navigation deep linking
Cómo agregar texto personalizado en lugar de URL en el mensaje de Deeplink (2)
Estoy integrando Firebase para admitir la función Deeplink en la aplicación. He visto en una de las pantallas de ejemplo sugeridas (PFA) aquí que podemos agregar nuestro propio texto personalizado en lugar de mostrar la URL de enlace profundo.
Intenté actualizar pero eso no ayudó. ¿Cómo hacer eso? ¿Alguna sugerencia?
He hecho lo mismo en una de mis aplicaciones. Por favor, siga el código a continuación.
<?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>
Pase su Textview al siguiente método (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);
}
O puede usar el siguiente código:
Agregue la vista de texto de la siguiente manera, cambie los atributos que desee.
<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" />
luego agregue el siguiente código:
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());
asegúrese de que cuando agrega enlaces, reemplácelos con etiquetas html como lo hice en el ejemplo String html = "Hi sweetheart go to <a href=/"http://www.google.com/">this</a> link";
Supongo que está utilizando una UITextView
para cuando el usuario ingresa texto (en iOS). Aquí es cómo lograr eso en 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
}
}
En Android, encontré un par de respuestas SO que parecen manejar bien el tema:
Hacer una vista de texto de hipervínculo en Android
Desde user370305:
Prueba esto y avísame qué pasa ...
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));
Poner enlace html en edittext android
De RobinHood:
Pon tu html en una cadena @
<string url="link"><a href="http://www.google.com">Google</a></string>
establecer String para editar el texto @
youredittext.setText(Html.fromHtml(getResources().getString(R.string.url)));
Para hacer clic, configure LinkMovementMethod con la acción necesaria @
youredittext.setMovementMethod(LinkMovementMethod.getInstance());
Si está tratando de lograr esto en HTML, use una etiqueta de anclaje ( a
):
<p>Click on this <a href="https://.com/">Link</a></p>