• Stars
    star
    780
  • Rank 58,299 (Top 2 %)
  • Language
    Java
  • License
    Apache License 2.0
  • Created over 8 years ago
  • Updated 9 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Attempts to improve how clickable links are detected, highlighted and handled in TextView

BetterLinkMovementMethod

Better-Link-Movement-Method

When android:autoLink or Linkify.addLinks is used to add links to a TextView, Android uses a class known as LinkMovementMethod for highlighting links when they're focused and dispatching Intents when they're clicked.

BetterLinkMovementMethod improves over LinkMovementMethod, by fixing some of its flaws:

  • No support for custom click listeners. For e.g., phone numbers always show up in the dialer when clicked and there's no way to change that.
  • Incorrect calculation of touch areas for links, resulting in ghost touch areas (video).
  • Unreliable highlighting of links (video).

A detailed explanation of why (and when) you should use BetterLinkMovementMethod can be read here: http://saket.me/better-url-handler-textview-android/

Usage

BetterLinkMovementMethod is designed to be a drop-in replacement for LinkMovementMethod:

dependencies {
  implementation 'me.saket:better-link-movement-method:2.2.0'
}
val textView = findViewById(...)
Linkify.addLinks(textView, Linkify.ALL)
textView.movementMethod = BetterLinkMovementMethod.getInstance()

Click listeners can be registered by creating a unique instance of BetterLinkMovementMethod for each TextView:

textView.movementMethod = BetterLinkMovementMethod.newInstance().apply {
  setOnLinkClickListener { textView, url ->
    // Handle click or return false to let the framework handle this link.
    true
  }
  setOnLinkLongClickListener { textView, url ->
    // Handle long-click or return false to let the framework handle this link.
    true
  }

License

Copyright 2018 Saket Narayan.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

More Repositories

1

cascade

Nested popup menus with smooth height animations for Android
Kotlin
2,013
star
2

InboxRecyclerView

Build expandable descendant navigation, inspired by Google Inbox
Kotlin
1,972
star
3

press

Cross-platform markdown editor written in Kotlin Multiplatform (work in progress)
Kotlin
1,856
star
4

telephoto

Building blocks for designing media experiences in Compose UI
Kotlin
907
star
5

Dank

Here lies the greatest Reddit app that was never released
Java
814
star
6

swipe

Swipe gesture actions for Compose UI
Kotlin
663
star
7

FluidKeyboardResize

Smoothly reacting to keyboard visibility changes in Android
Kotlin
641
star
8

flick

Flick dismiss all the things!
Kotlin
464
star
9

extended-spans

Squiggly underlines and rounded corners for text in Compose UI
Kotlin
381
star
10

unfurl

Generate link previews, inspired by Slack.
Kotlin
264
star
11

squiggly-slider

Squiggly slider, inspired by Android 13's media player notification.
Kotlin
191
star
12

startship

Never open sonatype's website again for releasing your libraries on maven central.
Kotlin
168
star
13

wysiwyg

Work in progress
Kotlin
130
star
14

ReuserView

woke af
Kotlin
128
star
15

file-size

Unit for representing and converting between file sizes, inspired by kotlin.time.Duration
Kotlin
76
star
16

Bunk-o-Meter

App for tracking college bunks.
Java
55
star
17

RxDiffUtil

Simplifying DiffUtil with RxJava
Java
16
star
18

BaseAndroidProject

A project with all the necessary dependencies and basic configuration I use everywhere.
Kotlin
13
star
19

TestAssignment

Work in progress
Kotlin
9
star
20

PaparazziPlayground

https://github.com/cashapp/paparazzi
Kotlin
8
star
21

Rx-Image-Loader

Interview assignment for uncommon.is
Java
8
star
22

press-website

Landing page for https://github.com/saket/press.
HTML
8
star
23

HelloAndroid

Kotlin
4
star
24

pdf-password-validator

A trimmed version of Java's PdfRenderer library that only validates a Pdf's password
Java
4
star
25

ProgressNotificationIssue

Java
4
star
26

Balloon

Java
3
star
27

BottomSheetPlease

Sample project for reproducing https://github.com/material-components/material-components-android/issues/1059
Kotlin
3
star
28

NestedScrollingBug

Sample project for https://issuetracker.google.com/issues/63971352
Java
2
star
29

homebrew-repo

Homebrew formulas
Ruby
1
star
30

LintBugSample

Kotlin
1
star