Eine wahnsinnig einfache Möglichkeit, anklickbare Links innerhalb einer TextView
zu erstellen.
Beim Erstellen von Talon für Twitter war es eines der schwierigsten Dinge, auf die ich gestoßen bin, das Erstellen dieser anklickbaren Links basierend auf einem bestimmten Text. Glücklicherweise habe ich es jedem leicht gemacht, diese Art von Stil auf seine TextView
anzuwenden.
Ähnlich wie alle großen Player (Google+, Twitter, Hust Talon Hust ), können Sie mit dieser Bibliothek anklickbare Links für jede beliebige Kombination von String
s innerhalb einer TextView
erstellen.
TextView
lange und kurze Klickaktionen für ein bestimmtes Wort anString
an oder verwenden Sie einen regulären Ausdruck, um anklickbare Links zu jedem Text festzulegen, der diesem Muster entspricht Der Hauptvorteil der Verwendung dieser Bibliothek gegenüber der Autolink-Funktionalität von TextView
besteht darin, dass Sie alles verknüpfen können, nicht nur Webadressen, E-Mails und Telefonnummern. Es bietet außerdem Farbanpassung und Touch-Feedback.
Es gibt zwei Möglichkeiten, diese Bibliothek zu verwenden:
Dies ist der bevorzugte Weg. Fügen Sie einfach hinzu:
dependencies {
compile ' com.klinkerapps:link_builder:2.0.5 '
}
zu Ihren Projektabhängigkeiten und führen Sie gradle build
oder gradle assemble
aus.
Laden Sie den Quellcode herunter und importieren Sie ihn als Bibliotheksprojekt in Eclipse. Das Projekt ist im Ordner „Bibliothek“ verfügbar. Weitere Informationen dazu finden Sie hier.
Die Funktionalität finden Sie in der MainActivity des Kotlin-Beispiels. Für Java überprüfen Sie JavaMainActivity.
Eine Liste der regulären Ausdrücke, die ich in Talon verwende, finden Sie hier
// Create the link rule to set what text should be linked.
// can use a specific string or a regex pattern
Link link = new Link ( "click here" )
. setTextColor ( Color . parseColor ( "#259B24" )) // optional, defaults to holo blue
. setTextColorOfHighlightedLink ( Color . parseColor ( "#0D3D0C" )) // optional, defaults to holo blue
. setHighlightAlpha ( .4f ) // optional, defaults to .15f
. setUnderlined ( false ) // optional, defaults to true
. setBold ( true ) // optional, defaults to false
. setOnLongClickListener ( new Link . OnLongClickListener () {
@ Override
public void onLongClick ( String clickedText ) {
// long clicked
}
})
. setOnClickListener ( new Link . OnClickListener () {
@ Override
public void onClick ( String clickedText ) {
// single clicked
}
});
TextView demoText = ( TextView ) findViewById ( R . id . test_text );
// create the link builder object add the link rule
LinkBuilder . on ( demoText )
. addLink ( link )
. build (); // create the clickable links
Sie können auch eine CharSequence
erstellen, anstatt die Links direkt zu erstellen und auf die TextView
anzuwenden. Vergessen Sie nicht, die Bewegungsmethode für Ihre TextView
festzulegen, nachdem Sie CharSequence
angewendet haben, da sonst die Links nicht anklickbar sind.
// find the text view. Used to create the link builder
TextView demoText = ( TextView ) findViewById ( R . id . test_text );
// Add the links and make the links clickable
CharSequence sequence = LinkBuilder . from ( this , demoText . getText (). toString ())
. addLinks ( getExampleLinks ())
. build ();
demoText . setText ( sequence );
// if you forget to set the movement method, then your text will not be clickable!
demoText . setMovementMethod ( TouchableMovementMethod . getInstance ());
Wenn Sie die Standardtextfarbe für Links festlegen möchten, ohne sie manuell für jedes Link
-Objekt einzugeben, können Sie sie über das Aktivitätsthema festlegen.
< style name = " LinkBuilderExampleTheme " parent = " android:Theme.Holo.Light " >
< item name = " linkBuilderStyle " >@style/LinkBuilder</ item >
</ style >
< style name = " LinkBuilder " >
< item name = " defaultLinkColor " >#222222</ item >
< item name = " defaultTextColorOfHighlightedLink " >#444444</ item >
</ style >
Die Bibliothek basiert auf Kotlin, sodass Sie einige Erweiterungsmethoden erhalten, mit denen Sie die Links auf TextView
anwenden können, anstatt den Builder zu erstellen.
val demo = findViewById< TextView >( R .id.demo_text)
demo.applyLinks(link1, link2, .. .)
demo.applyLinks(listOfLinks)
Standardmäßig verbraucht LinkBuilder
alle Berührungsereignisse in Ihrem TextView
. Das bedeutet, dass ListView.OnItemClickListener
niemals aufgerufen wird, wenn Sie versuchen, es zu implementieren. Die Lösung hierfür besteht darin, die LinkConsumableTextView
anstelle der normalen TextView in Ihren Layouts zu implementieren.
Mein LinkConsumableTextView
verbraucht Berührungsereignisse nur, wenn Sie auf den Link in der TextView
geklickt haben. Andernfalls wird das Touch-Ereignis auf das übergeordnete Ereignis verschoben, sodass Sie die ListView.OnItemClickListener
-Methode verwenden können.
Bitte teilen Sie dieses Repository auf und leisten Sie mithilfe von Pull-Anfragen einen Beitrag. Features können über Issues angefordert werden. Wir freuen uns sehr über alle Codes, Kommentare und Kritiken.
Das vollständige Änderungsprotokoll für die Bibliothek finden Sie hier.
Copyright 2015 Luke Klinker
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.