TextView
내에서 클릭 가능한 링크를 만드는 매우 쉬운 방법입니다.
Twitter용 Talon을 만드는 동안 제가 겪었던 가장 어려운 일 중 하나는 특정 텍스트를 기반으로 클릭 가능한 링크를 만드는 것이었습니다. 다행히도 누구나 쉽게 TextView
에 이러한 유형의 스타일을 적용할 수 있게 되었습니다.
모든 주요 기업이 수행하는 방식(Google+, Twitter, 기침 Talon 기침 )과 유사하게 이 라이브러리를 사용하면 TextView
내에서 String
조합에 대해 클릭 가능한 링크를 만들 수 있습니다.
TextView
내에서 특정 단어의 길고 짧은 클릭 동작을 지정하세요.String
을 일치시키거나 정규식을 사용하여 해당 패턴을 따르는 텍스트에 대한 클릭 가능한 링크를 설정합니다. TextView
의 자동 링크 기능에 비해 이 라이브러리를 사용하는 가장 큰 장점은 웹 주소, 이메일, 전화번호뿐만 아니라 무엇이든 연결할 수 있다는 것입니다. 또한 색상 사용자 정의 및 터치 피드백도 제공합니다.
이 라이브러리를 사용하는 방법에는 두 가지가 있습니다.
이것이 선호되는 방법입니다. 간단히 다음을 추가하세요.
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
를 구현하는 것입니다.
My 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.