2011-08-31 8 views

risposta

26
Spanned spanned = Html.fromHtml("<a href=\"http://google.com\">google.com</a>"); 
textView.setText(spanned); 

EDIT: Questo non è un modo ideale per gestire i clic su un link, ma non so altro modo.

L'attività principale contiene un TextView con un collegamento. L'URL del link ha uno schema personalizzato.

public class MainActivity extends Activity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     TextView link = (TextView)findViewById(R.id.link); 
     link.setText(
      Html.fromHtml("<a href='myscheme://www.google.com'>link</a>")); 
     link.setMovementMethod(LinkMovementMethod.getInstance()); 
    } 
} 

Quando questo link viene cliccato Android inizia un Activity con ACTION_VIEW utilizzando l'URL del link. Supponiamo che tu abbia un WebViewActivity che gestisce gli URI con questo schema personalizzato. Ottiene l'URI passato e sostituisce il suo schema con http.

public class WebViewActivity extends Activity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     if(savedInstanceState == null) { 
      String url = 
       getIntent().getDataString().replace("myscheme://", "http://"); 
      // do something with this URL. 
     } 
    } 
} 

Per gestire schemi personalizzati URI WebViewActivity deve avere un filtro intento nel file AndroidManifest.xml:

<activity android:name=".WebViewActivity" android:exported="false"> 
    <intent-filter> 
     <action android:name="android.intent.action.VIEW" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
     <data android:scheme="myscheme" /> 
    </intent-filter> 
</activity> 
+0

Grazie Pixie, ma si aprirà nel browser predefinito non in WebView. :( –

+1

Oh, ho frainteso la tua domanda: in questo caso puoi creare un URL con il tuo schema e registrarlo con un filtro intent nel file AndroidManifest.x2 – Michael

+0

Grazie ancora, ma puoi spiegarlo un po 'di più? –

-2
hotel_website=(TextView)viewflipper.findViewById(R.id.tv_website); 
hotel_website.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
    String url = "http://" +hotel_website.getText().toString(); 
    Intent i = new Intent(Intent.ACTION_VIEW); 
    i.setData(Uri.parse(url)); 
    startActivity(i); 
    } 
}); 

e in XML

<TextView 
    android:clickable="true" 
</TextView> 
2

impostare la proprietà Android: autolink nel layout della vista testo

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"   
    android:text="your text" 
    android:autoLink="web" /> 
+0

Apre i collegamenti nel browser. La risposta è come aprire i collegamenti in WebView – eugeneek

+0

Solo un piccolo problema. Dopo aver applicato AutoLink, il colore diventa verde e applica colori diversi che non funzionano. Com'è quello ? – Mahadev

+0

Hai salvato la mia giornata. Grazie :) – Atul

0

Dopo aver lavorato per me. Ho appena usato il codice onTouchEvent da LinkMovementMethod. Puoi impostare il link in textView come Michael menzionato sopra o puoi impostarlo in strings.xml. Uso questa libreria per aprire i collegamenti https://github.com/DreaminginCodeZH/CustomTabsHelper.

textView.setMovementMethod(new MovementMethod() { 
     @Override 
     public void initialize(TextView widget, Spannable text) { 

     } 

     @Override 
     public boolean onKeyDown(TextView widget, Spannable text, int keyCode, KeyEvent event) { 
      return false; 
     } 

     @Override 
     public boolean onKeyUp(TextView widget, Spannable text, int keyCode, KeyEvent event) { 
      return false; 
     } 

     @Override 
     public boolean onKeyOther(TextView view, Spannable text, KeyEvent event) { 
      return false; 
     } 

     @Override 
     public void onTakeFocus(TextView widget, Spannable text, int direction) { 

     } 

     @Override 
     public boolean onTrackballEvent(TextView widget, Spannable text, MotionEvent event) { 
      return false; 
     } 

     /** 
     * Borrowed code for detecting and selecting link from 
     * {@link LinkMovementMethod#onTouchEvent(TextView, Spannable, MotionEvent)} 
     */ 
     @Override 
     public boolean onTouchEvent(TextView widget, Spannable buffer, MotionEvent event) { 
      int action = event.getAction(); 

      if (action == MotionEvent.ACTION_UP || 
        action == MotionEvent.ACTION_DOWN) { 
       int x = (int) event.getX(); 
       int y = (int) event.getY(); 

       x -= widget.getTotalPaddingLeft(); 
       y -= widget.getTotalPaddingTop(); 

       x += widget.getScrollX(); 
       y += widget.getScrollY(); 

       Layout layout = widget.getLayout(); 
       int line = layout.getLineForVertical(y); 
       int off = layout.getOffsetForHorizontal(line, x); 

       ClickableSpan[] link = buffer.getSpans(off, off, ClickableSpan.class); 

       if (link.length != 0) { 
        if (action == MotionEvent.ACTION_UP) { 
         // do whatever else you want here on link being clicked 
         Selection.removeSelection(buffer); 

        } else if (action == MotionEvent.ACTION_DOWN) { 
         Selection.setSelection(buffer, 
           buffer.getSpanStart(link[0]), 
           buffer.getSpanEnd(link[0])); 
        } 

        return true; 
       } else { 
        Selection.removeSelection(buffer); 
       } 
      } 

      return false; 
     } 

     @Override 
     public boolean onGenericMotionEvent(TextView widget, Spannable text, MotionEvent event) { 
      return false; 
     } 

     @Override 
     public boolean canSelectArbitrarily() { 
      return false; 
     } 
    }); 
Problemi correlati