Maneira incrivelmente fácil de criar links clicáveis dentro de um TextView
.
Ao criar o Talon para Twitter, uma das coisas mais difíceis que encontrei foi criar esses links clicáveis com base em um texto específico. Felizmente, tornei mais fácil para qualquer pessoa aplicar esse tipo de estilo aos seus TextView
.
Semelhante a como todos os grandes jogadores fazem isso (Google+, Twitter, tosse Talon tosse ), esta biblioteca permite criar links clicáveis para qualquer combinação de String
s dentro de um TextView
.
TextView
String
s únicos ou use uma expressão regular para definir links clicáveis para qualquer texto em conformidade com esse padrão A principal vantagem de usar esta biblioteca sobre a funcionalidade de link automático do TextView
é que você pode vincular qualquer coisa, não apenas endereços da web, e-mails e números de telefone. Ele também fornece personalização de cores e feedback de toque.
Existem duas maneiras de usar esta biblioteca:
Esta é a forma preferida. Basta adicionar:
dependencies {
compile ' com.klinkerapps:link_builder:2.0.5 '
}
às dependências do seu projeto e execute gradle build
ou gradle assemble
.
Baixe o código-fonte e importe-o como um projeto de biblioteca no Eclipse. O projeto está disponível na pasta biblioteca . Para obter mais informações sobre como fazer isso, leia aqui.
A funcionalidade pode ser encontrada na MainActivity do exemplo Kotlin. Para Java, verifique JavaMainActivity.
Para obter uma lista de expressões regulares que uso no Talon, você pode acessar aqui
// 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
Você também pode criar um CharSequence
em vez de criar e aplicar os links diretamente no TextView
. Não se esqueça de definir o método de movimento no seu TextView
depois de aplicar o CharSequence
, caso contrário os links não serão clicáveis.
// 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 ());
Se desejar definir a cor de texto padrão para links sem inseri-la manualmente em cada objeto Link
, ela poderá ser definida no tema da atividade.
< 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 >
A biblioteca é construída em Kotlin, então você obtém alguns métodos de extensão que pode usar para aplicar os links ao TextView
, em vez de criar o construtor.
val demo = findViewById< TextView >( R .id.demo_text)
demo.applyLinks(link1, link2, .. .)
demo.applyLinks(listOfLinks)
Por padrão, LinkBuilder
consumirá todos os eventos de toque no seu TextView
. Isso significa que ListView.OnItemClickListener
nunca será chamado se você tentar implementá-lo. A solução para isso é implementar LinkConsumableTextView
em vez do TextView normal em seus layouts.
Meu LinkConsumableTextView
só consumirá eventos de toque se você tiver clicado no link dentro do TextView
. Caso contrário, ele adiará o evento touch para o pai, o que permite usar o método ListView.OnItemClickListener
.
Por favor, bifurque este repositório e contribua usando pull requests. Os recursos podem ser solicitados por meio de problemas. Todos os códigos, comentários e críticas são muito apreciados.
O changelog completo da biblioteca pode ser encontrado aqui.
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.