2013-04-17 3 views
3

У меня этот код работает для моего метода, который вызывает EditText, я пытался использовать тот же код для TextView, но он не работает. Текст не превращается в гиперссылку, как в EditText, кто-нибудь знает почему?Работает ли Linkify для TextView в Android?

public class MainActivity extends Activity { 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    TextView tv = (TextView) findViewById(R.id.link_view); 
    // make sure that setText call comes BEFORE Linkify.addLinks call 
    tv.setText(tv.getText().toString()); 
    Linkify.addLinks(tv, Linkify.WEB_URLS); 
}} 

Вот раскладка:

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" > 

<TableLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" > 

    <TableRow> 

     <TextView 
      android:id="@+id/link_lbl" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:paddingRight="10dip" 
      android:text="Link" /> 

     <TextView 
      android:id="@+id/link_view" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:text="google.com" /> 
    </TableRow> 
</TableLayout> 

Это будет прекрасно работать в EditText, я просто нужна помощь делает то же самое в TextView

+0

http://developer.android.com/reference/android/text/util/Linkify.html – Raghunandan

ответ

2

Имеют интерактивный диапазон и устанавливают текст с кликируемым диапазоном. Вы можете иметь собственный цвет для диапазона clickabke. Когда вы нажимаете на текст в текстовом режиме, отображается тост.

String title="hello"; 
SpannableString ss1= new SpannableString(title); 
    ss1.setSpan(new MyClickableSpan(title), 0, ss1.length(), 0); 
    tv = (TextView) findViewById(R.id.textview); 
    tv.setText(ss1); 
    tv.setMovementMethod(LinkMovementMethod.getInstance()); 

MyClickableSpan

class MyClickableSpan extends ClickableSpan{  
    String clicked; 
    public MyClickableSpan(String string) 
    { 
    super(); 
    clicked =string; 
    } 
    public void onClick(View tv) 
    { 
    // onclick of text in textview do something 
Toast.makeText(MainActivity.this,clicked ,Toast.LENGTH_SHORT).show(); 
    //display a toast 
    } 
    public void updateDrawState(TextPaint ds) 
    { 
    ds.setColor(Color.BLUE);//set text color 
    ds.setUnderlineText(true); // set to false to remove underline 
    } 
    } 

Результирующая Snap Shot

enter image description here

EDIT:

Откройте браузер с URL по щелчку на текст в TextView. Вы также можете передать URL-адрес активности. Получите URL-адрес и загрузите URL-адрес в webview.

<uses-permission android:name="android.permission.INTERNET"/> 

public void onClick(View tv) { 
//do something 

    Toast.makeText(MainActivity.this,clicked , 
     Toast.LENGTH_SHORT).show(); 
    String url = "http://www.example.com"; 
    Intent i = new Intent(Intent.ACTION_VIEW); 
    i.setData(Uri.parse(url)); 
    startActivity(i); 
} 


       OR 

В OnClick()

Intent t= new Intent(MainActivity.this,SecondActivity.class); 
    t.putExtra("key","http://www.google.com"); 
    startActivity(t); 

second.xml

<?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <WebView 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:id="@+id/wv"></WebView> 
    </LinearLayout> 

Тогда в SecondActivty

общественный класс SecondActivity расширяет активность {

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.second); 
    WebView wv= (WebView) findViewById(R.id.wv); 
    Bundle extras= getIntent().getExtras(); 
    if(extras!=null) 
    { 
     wv.loadUrl(extras.getString("key")); 
    } 
} 
} 
+0

, если я ставлю сайт, он загружает его? – Lucas

+0

@ lucas вам нужно обработать это в onClick(). Получите веб-просмотр и загрузите url в onClick() или запустите новое действие, которое загружает webview с URL-адресом – Raghunandan

+0

@ Лукас проверяет редактирование – Raghunandan

2

Просто попробуйте ниже код. Он отлично работает для меня.

TextView tv = .... 
tv.setMovementMethod(LinkMovementMethod.getInstance()); 

String content = tv.getText().toString(); 
List<String> links = new ArrayList<String>(); 

Pattern p = Patterns.WEB_URL; 
Matcher m = p.matcher(content); 
while (m.find()) { 
    String urlStr = m.group(); 
    links.add(urlStr); 
} 

SpannableString f = new SpannableString(content); 

for (int i = 0; i < links.size(); i++) { 
    final String url = links.get(i); 

    f.setSpan(new InternalURLSpan(new OnClickListener() { 
     public void onClick(View v) { 
      Context ctx = v.getContext(); 
      String urlToOpen = url; 
      if (!urlToOpen.startsWith("http://") || !urlToOpen.startsWith("https://")) 
       urlToOpen = "http://" + urlToOpen; 
      openURLInBrowser(urlToOpen, ctx); 
     } 
    }), content.indexOf(url), content.indexOf(url) + url.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
} 

tv.setText(f); 
+0

Vmerror У меня возникли проблемы с реализацией кода, не могли бы вы мне помочь? Я новичок с android – Lucas