翻看Android Api,無意看到了Linkify。按照Api的說明,Linkify可以轉化符合匹配規則的文字為可點擊的串連。
感覺這個還是有點用處,下面來試一試。
1.建立一個項目
2.修改樣式檔案
為了方便查看效果,添加一個EditText和一個TextView
代碼如下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:weightSum="1"> <EditText android:layout_height="wrap_content" android:layout_width="fill_parent" android:id="@+id/inputText"> <requestFocus></requestFocus> </EditText> <TextView android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:layout_width="fill_parent" android:layout_weight="0.08" android:id="@+id/viewText" android:text="請輸入內容"></TextView> </LinearLayout>
3.修改AndroidLearnActivity.java
看一下關鍵區段的說明
在本例子中我們使用第一個。再看一看Linkify預設支援識別什麼。
MAP_ADDRESSES我沒有理解到…
下面看一下完整的代碼:
package cn.ghy.sdx;
import android.app.Activity;
import android.os.Bundle;
import android.text.util.Linkify;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnKeyListener;
import android.widget.EditText;
import android.widget.TextView;
public class AndroidLearnActivity extends Activity {
EditText editText;
TextView textView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
editText=(EditText)this.findViewById(R.id.inputText);
textView=(TextView)this.findViewById(R.id.viewText);
editText.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
textView.setText(editText.getText());
Linkify.addLinks(textView, Linkify.EMAIL_ADDRESSES|Linkify.PHONE_NUMBERS|Linkify.WEB_URLS);
return false;
}
});
}
}
效果:
網址:
電話:
郵箱:
學習進階:
Linkify內建的幾種基本可以滿足需要,但是有時候有更靈活的需要。比如我需要使用者輸入一個社會安全號碼。
正則我不是很清楚,用個簡單的。
textView.setText(editText.getText());
Pattern pattern = Pattern.compile("\\d{15}|\\d{18}");
String scheme="http://chaxun?sfz="; //這是隨意寫哈
Linkify.addLinks(textView, pattern, scheme);
效果: