LoginSignup
5
1

More than 1 year has passed since last update.

【Android】TextView内のURLリンク

Last updated at Posted at 2022-03-09

文字内にURL埋め込み (下線あり)

xmlの</a>タグを使用。

strings.xml
<string name="text">確認は<a href="https://www.example.com">こちら</a>から</string>
activity_main.xml
<TextView
	android:id="@+id/text"
	android:layout_width="0dp"
	android:layout_height="0dp"
	android:text="@string/text"
	android:textColorLink="@color/design_default_color_primary"
	android:textSize="20sp"
	app:layout_constraintBottom_toBottomOf="parent"
	app:layout_constraintEnd_toEndOf="parent"
	app:layout_constraintStart_toStartOf="parent"
	app:layout_constraintTop_toTopOf="parent"/>
MainActivity.kt
binding.text.movementMethod = LinkMovementMethod.getInstance()
スクリーンショット 2022-03-09 160748.png

文字内にURL埋め込み (下線なし)

URLSpanクラスを拡張して使用。

activity_main.xml
<TextView
	android:id="@+id/text"
	android:layout_width="0dp"
	android:layout_height="0dp"
	android:textColorLink="@color/design_default_color_primary"
	android:textSize="20sp"
	app:layout_constraintBottom_toBottomOf="parent"
	app:layout_constraintEnd_toEndOf="parent"
	app:layout_constraintStart_toStartOf="parent"
	app:layout_constraintTop_toTopOf="parent"/>
MainActivity.kt
val clickableSpan = object : URLSpan("https://www.example.com") {
	override fun updateDrawState(ds: TextPaint) {
		super.updateDrawState(ds)
		ds.isUnderlineText = false
	}
}

binding.text.text = SpannableString("確認はこちらから").apply {
	setSpan(clickableSpan, 3, 6, Spanned.SPAN_INCLUSIVE_INCLUSIVE)
}
binding.text.movementMethod = LinkMovementMethod.getInstance()
スクリーンショット 2022-03-09 154025.png

参照記事

テキスト内のURL自動検出(下線あり)

android:autoLinkを使用。

activity_main.xml
<TextView
	android:id="@+id/text"
	android:layout_width="0dp"
	android:layout_height="0dp"
	android:autoLink="web"
	android:text="確認URL: https://www.example.com"
	android:textColorLink="@color/design_default_color_primary"
	android:textSize="20sp"
	app:layout_constraintBottom_toBottomOf="parent"
	app:layout_constraintEnd_toEndOf="parent"
	app:layout_constraintStart_toStartOf="parent"
	app:layout_constraintTop_toTopOf="parent"/>
スクリーンショット 2022-03-09 161315.png

テキスト内のURL自動検出(下線なし)

URLSpanクラスを拡張して使用。

activity_main.xml
<TextView
	android:id="@+id/text"
	android:layout_width="0dp"
	android:layout_height="0dp"
	android:text="確認URL: https://www.example.com"
	android:textColorLink="@color/design_default_color_primary"
	android:textSize="20sp"
	app:layout_constraintBottom_toBottomOf="parent"
	app:layout_constraintEnd_toEndOf="parent"
	app:layout_constraintStart_toStartOf="parent"
	app:layout_constraintTop_toTopOf="parent"/>
MainActivity.kt
val spannable = binding.text.text.toSpannable()
val matcher = Pattern.compile("(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]")
	.matcher(binding.text.text)
while (matcher.find()) {
	val urlSpan = object : URLSpan(matcher.group()) {
		override fun updateDrawState(ds: TextPaint) {
			super.updateDrawState(ds)
			ds.isUnderlineText = false
		}
	}
	spannable.setSpan(urlSpan, matcher.start(), matcher.end(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
}
binding.text.text = spannable
binding.text.movementMethod = LinkMovementMethod.getInstance()
スクリーンショット 2022-03-09 163045.png

参照記事

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1