TextViewにurlを埋め込んで、タップでWebViewを開く
TextViewに対して動的にurlを埋め込み、それを開く。
- ブラウザ
- アプリ内のWebView
のそれぞれでの開きかた
ブラウザを開く場合
TextViewにリンクを埋め込んだテキストを入れて、それをタップした時に、ブラウザを起動してそのリンク先を開くようにする
// SampleActivity.javaとする TextView tv = (TextView) findViewById(id.tv_link); // tvをclickableにする MovementMethod mMethod = LinkMovementMethod.getInstance(); tv.setMovementMethod(mMethod); String url = "http://www.google.co.jp"; // urlをhtmlを使ってリンクテキストに埋め込む CharSequence link = Html.fromHtml("<a href=\"" + url + "\">リンクテキスト</a>"); tv.setText(link);
これでOKです。
WebViewで開く場合
ここからが本番
TextViewに埋め込んだリンクを外部アプリであるブラウザではなく、アプリ内のWebViewで開くためには、
まず対象TextViewのonClickをoverrideして、Intentで別のActivityにurlを渡すようにし、
遷移先のActivityではそのurlをWebViewを使って表示するように実装すれば良い
// 上記コードからの続き tv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 遷移先はWebViewFromTextView.javaとする Intent i = new Intent(SampleActivity.this, WebViewFromTextView.class); i.setAction(Intent.ACTION_VIEW); i.setData(Uri.parse(url)); startActivity(i); } });
これでSampleActivity.javaはOKです。
続いてWebViewFromTextView.javaは
public class WebViewFromTextView extends Activity { @SuppressLint("SetJavaScriptEnabled") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate( savedInstanceState ); // WebViewを置いているのはweb_view.xml setContentView(R.layout.web_view); if( savedInstanceState == null ) { // SampleActivity.javaからurlを受け取っている String url = getIntent().getDataString(); Log.d("WebViewFromTextView:", url); // WebViewの設定 // 表示するWebViewのidをwebViewとしている WebView webView = (WebView)findViewById(R.id.webView); // focusが当たるように。いらないかも webView.requestFocus(); // jsの有効化(XSSの恐れがあるため怒られるが...) webView.getSettings().setJavaScriptEnabled(true); // ズーム出来るように webView.getSettings().setBuiltInZoomControls(true); // クライアント作成 webView.setWebViewClient(new WebViewClient()); // ここでurl読み込み webView.loadUrl(url); } } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // webviewでbackボタンが押下された時、履歴を戻れるなら戻り、戻れないなら前のActivityに戻る WebView webview = (WebView)findViewById(R.id.webView); if (keyCode == KeyEvent.KEYCODE_BACK && webview.canGoBack()) { webview.goBack(); return true; } return super.onKeyDown(keyCode, event); } }
としたらOKでしょう。
WebView内でbackボタンが押された場合に前のActivityまで戻ってしまうので、
backボタンの挙動をOverrideしています。
注意事項
AndroidManifest.xmlに遷移先にActivityを加えること、internet通信を許可することを忘れないように。