TextView
内でクリック可能なリンクを作成する非常に簡単な方法。
Talon for Twitter を作成しているときに、私が遭遇した最も困難な点の 1 つは、特定のテキストに基づいてこれらのクリック可能なリンクを作成することでした。幸いなことに、私は誰でもこのタイプのスタイルをTextView
に簡単に適用できるようにしました。
すべての大手プレーヤー (Google+、Twitter、咳Talon咳) のやり方と同様に、このライブラリを使用すると、 TextView
内のString
の任意の組み合わせをクリック可能なリンクを作成できます。
TextView
内の特定の単語の長クリックおよび短クリック アクションを指定します。String
と一致するか、正規表現を使用して、そのパターンに準拠するテキストへのクリック可能なリンクを設定しますTextView
の自動リンク機能よりもこのライブラリを使用する主な利点は、Web アドレス、電子メール、電話番号だけでなく、あらゆるものをリンクできることです。また、色のカスタマイズやタッチフィードバックも提供します。
このライブラリを使用するには 2 つの方法があります。
これが好ましい方法です。以下を追加するだけです。
dependencies {
compile ' com.klinkerapps:link_builder:2.0.5 '
}
プロジェクトの依存関係を変更し、 gradle build
またはgradle assemble
を実行します。
ソース コードをダウンロードし、ライブラリ プロジェクトとして Eclipse にインポートします。プロジェクトはフォルダーライブラリで利用できます。これを行う方法の詳細については、ここをお読みください。
機能は Kotlin サンプルの MainActivity にあります。 Java の場合は、JavaMainActivity を確認してください。
Talon で使用する正規表現のリストについては、ここにアクセスしてください。
// 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
リンクを作成してTextView
に直接適用する代わりに、 CharSequence
を作成することもできます。 CharSequence
適用した後、 TextView
に移動メソッドを設定することを忘れないでください。そうしないと、リンクをクリックできなくなります。
// 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 ());
各Link
オブジェクトに手動で入力せずに、リンクのデフォルトのテキストの色を設定したい場合は、アクティビティのテーマから設定できます。
< 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 >
このライブラリは Kotlin 上に構築されているため、ビルダーを作成する代わりに、 TextView
にリンクを適用するために使用できるいくつかの拡張メソッドを取得します。
val demo = findViewById< TextView >( R .id.demo_text)
demo.applyLinks(link1, link2, .. .)
demo.applyLinks(listOfLinks)
デフォルトでは、 LinkBuilder
TextView
上のすべてのタッチ イベントを消費します。これは、 ListView.OnItemClickListener
を実装しようとしても呼び出されないことを意味します。これを修正するには、レイアウトに通常の TextView ではなくLinkConsumableTextView
を実装します。
私のLinkConsumableTextView
、 TextView
内のリンクをクリックした場合にのみタッチ イベントを消費します。それ以外の場合は、タッチ イベントを親に延期するため、 ListView.OnItemClickListener
メソッドを使用できるようになります。
このリポジトリをフォークし、プル リクエストを使用して貢献してください。機能は課題を使用してリクエストできます。すべてのコード、コメント、批評を大歓迎です。
ライブラリの完全な変更ログはここにあります。
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.