Quiero crear un vínculo para un texto de vista de texto como Google . ¿Hay alguna forma de hacer un enlace como este? (es decir) Al hacer clic en la palabra Google, debería abrir el enlace correspondiente. Cualquier idea es bienvenida.
Quiero crear un vínculo para un texto de vista de texto como Google . ¿Hay alguna forma de hacer un enlace como este? (es decir) Al hacer clic en la palabra Google, debería abrir el enlace correspondiente. Cualquier idea es bienvenida.
Respuestas:
Prueba esto y cuéntame qué sucedió.
Usando código java:
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));
Desde el nivel de API> = 24 en adelante Html.fromHtml(String source)
está obsoleto en su lugar fromHtml(String, int)
, use ,
textView.setText(Html.fromHtml(text, Html.FROM_HTML_MODE_COMPACT));
O en el archivo XML de diseño, dentro de los atributos del widget TextView
android:autoLink="web"
android:linksClickable="true"
android:autoLink="web"
de XML. Tenía ambos y no funcionó.
utilizar android:autoLink="web"
en el xml de su TextView. Debería convertir automáticamente las URL en las que se puede hacer clic (si se encuentran en el texto)
Todo probado y funcionando al 100%
Solución: a android:autoLink="web"
continuación se
muestra un ejemplo completo de diseño de muestra XML
<TextView
android:id="@+id/txtLostpassword"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:autoLink="email"
android:gravity="center"
android:padding="20px"
android:text="@string/lostpassword"
android:textAppearance="?android:attr/textAppearanceSmall" />
<TextView
android:id="@+id/txtLostpassword"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:autoLink="web"
android:gravity="center"
android:padding="20px"
android:text="@string/defaultpassword"
android:textAppearance="?android:attr/textAppearanceSmall" />
Cadena en string.xml
<string name="lostpassword">If you lost your password please contact <a href="mailto:support@cleverfinger.com.au?Subject=Lost%20Password" target="_top">support@cleverfinger.com.au</a></string>
<string name="defaultpassword">User Guide <a href="http://www.cleverfinger.com.au/user-guide/">http://www.cleverfinger.com.au/user-guide/</a></string>
Esto también se puede hacer usando la propiedad predeterminada de Textview
android:autoLink="email"
Nota: - Html.fromHtml está obsoleto en Android N
Necesita verificar y soporte Android N
y versiones superiores de Android
//Set clickable true
tagHeading.setClickable(true);
//Handlle click event
tagHeading.setMovementMethod(LinkMovementMethod.getInstance());
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
tagHeading.setText(Html.fromHtml("<a href='https://github.com/hiteshsahu'>https://github.com/hiteshsahu</a>", Html.FROM_HTML_MODE_LEGACY));
} else {
tagHeading.setText(Html.fromHtml("<a href='https://github.com/hiteshsahu'>https://github.com/hiteshsahu</a>"));
}
Alternativamente
No puede querer agregar mediante programación la marca autoLink en TextView.
android: autoLink = "web"
android: linksClickable = "true"
De esta manera no es necesario agregar <a href='somelink'>
etiquetas.
Lo cual es una desventaja, si desea agregar hyperlink
un, text
no puede hacerlo de esta manera. por ejemplo, no puedes hacer algo como esto: - [ hiteshsahu ] [1]
<TextView
android:id="@+id/tag_info"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/tag_ll"
android:layout_gravity="left"
android:layout_margin="10dp"
android:autoLink="web"
android:linksClickable="true"
android:text="https://github.com/hiteshsahu"
android:textColor="@color/secondary_text" />
El resultado de ambos enfoques: -
Para la última versión de SDK fromHtml
está en desuso Use debajo de la línea
String yourtext = "<a style='text-decoration:underline' href='http://www.sample.com'> Sample Website </a>";
if (Build.VERSION.SDK_INT >= 24) {
textView.setText(Html.fromHtml(yourtext, Html.FROM_HTML_MODE_LEGACY));
} else {
textView.setText(Html.fromHtml(yourtext));
}
He creado una función de extensión siguiente de una vista de texto.
@SuppressLint("SetTextI18n")
fun TextView.makeHyperLink(url: String) {
text = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
Html.fromHtml("<a href='${url}'>${text}</a>", Html.FROM_HTML_MODE_COMPACT)
} else {
Html.fromHtml("<a href='${url}'>${text}</a>")
}
movementMethod = LinkMovementMethod.getInstance()
isClickable = true
}
y llamándolo así
tvTos.makeHyperLink(tos_url)
También puede pasar texto como parámetro.