. Adicionar uma linha tracejada em um layout Android - Tudo Sobre Tecnologia

Salve-se horas de consternação usando esta solução alternativa para adicionar uma linha tracejada ao seu layout Android. 

android-logo-generic-092413.jpg
 
Às vezes, ser um engenheiro de software pode ser muito frustrante. Foi um daqueles dias, apesar do fato de que as coisas começaram a sair na direção certa.
Eu tenho um pedido de um diretor de criação no meu projeto atual para adicionar uma linha tracejada a um layout. De acordo com o documentação oficial do Google , isso está fora da funcionalidade caixa. Depois de uma breve varredura do guia SDK, eu estava pronto para o rock and roll.
Eu definir um drawable XML simples, assim:

<? Xml version = "1.0" encoding = "UTF-8">
<Forma
xmlns: android = "http://schemas.android.com/apk/res/android"
android: forma = "linha">
<AVC
android: color = "# FF0000FF"
android: dashWidth = "4DP"
android: dashGap = "8DP" />
</ Forma>
 
Em seguida, aplicá-lo a uma visão em um layout simples:

<Xmlns RelativeLayout: android = "http://schemas.android.com/apk/res/android"
android: layout_width = "match_parent"
android: layout_height = "match_parent">
<Ver
android: layout_centerInParent = "true"
android: layout_width = "match_parent"
android: layout_height = "8DP"
android: layout_margin = "20DP"
android: background = "@ drawable / dotted_line" />
</ RelativeLayout>
 
Em questão de minutos, eu girava-se um dispositivo virtual Android e validado minhas suposições ( Figura A ).
Figura A

android_framed_dotted_line_011514.png
 
No entanto, depois de aplicar a mesma técnica para o meu código de produção, eu descobri algo problemático: A linha apareceu completamente sólida em um dispositivo real ( Figura B ).
Figura B

android_framed_solid_line_011514.png
   
Quebrei a cabeça e os cérebros dos meus colegas e, eventualmente, acabou pedindo ao onisciente Google. Depois de mais de uma hora de ler blogs e fóruns relacionados com o Android mensagens, me deparei com esta pequena jóia no Android oficial issue tracker:Issue 29944 : DashPathEffect / drawLine não está funcionando corretamente quando hardwareAccelerated = "true" . Eu não estava definindo explicitamente a aceleração de hardware para true no meu manifesto, mas uma rápida olhada para trás a documentação Google confirma que a partir de API 14 aceleração de hardware é verdade por padrão em todas as vistas .
Como eu disse, foi um daqueles dias. Felizmente, a solução é bastante simples: você adicione a seguinte linha com a visão afetada em seu layout:
android: layerType = "software"
 
O resultado foi exatamente o que eu queria ( Figura C ).
Figura C

android_framed_dotted_line2_011514.png
  
Lembro-me de o meu avô voltando do trabalho alguns dias olhando como se ele tivesse sido através do moinho. Eu ia perguntar-lhe como seu dia foi, e sua resposta seria: "Há dias em que você começa o urso, e outros dias o urso você recebe." Eu gostaria de pensar que hoje eu tenho o urso - mesmo que o urso se entrar em alguns bons licks.

Sobre 

William J Francis começou a programar computadores aos onze anos. Especializando-se em plataformas embarcadas e móveis, ele tem mais de 20 anos de engenharia de software profissional em seu currículo, incluindo um período de quatro anos em intellige Militar do Exército dos EUA ...

0 comentários Goocle+ 0 Facebook

Postar um comentário

 
Tudo Sobre Tecnologia © 2013-2020. Todos os direitos reservados. Tudo Sobre Tecnologia. Desenvolvido por TST
Topo