Android の TextView で、「テキストの一部を押すとなんかのアクションが起こる」というのが ClickableSpan というのを使えばできそうだったので、やってみました。

```java ClikcableSpanTestActivity.java
public class ClikcableSpanTestActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

    final List<Pair<String, String>> data = new ArrayList<Pair<String,String>>();
    data.add(new Pair<String, String>("りんご", "隠し味としてカレーに入れます"));
    data.add(new Pair<String, String>("みかん", "あぶりだしに使います"));
    data.add(new Pair<String, String>("すいか", "種を食べると盲腸になります(嘘)"));
    
    final SpannableStringBuilder sb = new SpannableStringBuilder();
    final String SEP = ", ";
    int spanStart = 0;

    for (final Pair<String, String> p : data) {
        sb.append(p.first);
        sb.append(SEP);

        // 追加した文字列を Span にする
        sb.setSpan(new ClickableSpan() {
			@Override
			public void onClick(View widget) {
				Toast.makeText(getApplicationContext(), 
					p.second, Toast.LENGTH_SHORT).show();
			}
		}, spanStart, spanStart + p.first.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        
        spanStart += (p.first.length() + SEP.length());
	}
    
    TextView tv = (TextView)findViewById(R.id.text);
    tv.setText(sb);
    tv.setMovementMethod(LinkMovementMethod.getInstance()); // これ忘れるとクリックできなくて小一時間悩む
} } ```

項目をカンマつなぎで表示して、項目のところだけリンクっぽくします。
リンクをクリックすると Toast を表示します。(下図のように)
また URLSpan というクラスもあり、クリックすると指定したURLに移動(ブラウザアプリが起動)します。

参考

装飾したり位置やサイズ変えたり、TextView でもいろいろできるんですねー。
(VB6の)Label とは違うのだよ、Label とは!

Android

published

Ads

Read more!

amay077

Microsoft MVP(Xamarin). フルリモートワーカー. Geospatial Mobile app developer. Love C#.

amay077 amay077