Quando eu tenho um TextView
com a \n
no texto ,, à direita, tenho dois singleLine
TextView
s, um abaixo do outro sem espaçamento entre eles. Eu defini o seguinte para todos os três TextView
s.
android:lineSpacingMultiplier="1"
android:lineSpacingExtra="0pt"
android:paddingTop="0pt"
android:paddingBottom="0pt"
A primeira linha da esquerda se TextView
alinha perfeitamente com a parte superior direita TextView
.
A segunda linha da esquerda TextView
é um pouco maior que a segunda linha do canto inferior direito TextView
.
Parece que há algum tipo de preenchimento oculto na parte superior e inferior do TextView
s. Como posso remover isso?
Respostas:
ou
XML
seria:Defina se
TextView
inclui estofamento superior e inferior para dar espaço a detalhes que vão acima da subida e descida normais. O padrão é verdadeiro.fonte
1dp
top preenchimento / fundo, estou errado (eu uso?Developer options -> Show layout bounds
)includeFontPadding="false"
remove parte do espaço, mas não todo. muito estranho.includeFontPadding
é excelente para remover qualquer preenchimento adicional da própria fonte, mas pode causar problemas em idiomas com subidas e descidas. Eu garantiria que, se você fizer isso, testasse idiomas como espanhol e tailandês, se os apoiar.Eu sinto sua dor. Eu tentei todas as respostas acima, incluindo a
setIncludeFontPadding
to false, o que não fez nada para mim.Minha solução?
layout_marginBottom="-3dp"
noTextView
dá uma solução para o fundo, BAM!Embora -3dp em
layout_marginTop
falha .... ugh.fonte
Procurei muitas respostas adequadas, mas não encontrei uma resposta que pudesse remover exatamente todo o preenchimento do
TextView
, mas finalmente, depois de ler o documento oficial, consegui uma solução para textos de linha únicaAdicionar essas duas linhas ao
TextView
xml fará o trabalho.O primeiro atributo remove o preenchimento reservado para acentos e o segundo atributo remove o espaçamento reservado para manter o espaço adequado entre duas linhas de texto.
fonte
fontPath
atributo?Se você usar
AppCompatTextView
(ou emAPI 28
diante), poderá usar a combinação desses 2 atributos para remover o espaçamento na primeira linha:XML
Kotlin
fonte
Isso também me incomodou, e a resposta que encontrei foi que, na verdade, há espaço adicional na própria fonte, não no TextView. É bastante irritante, proveniente de um histórico de publicação de documentos, a quantidade limitada de controle que você tem com o Android sobre elementos tipográficos. Eu recomendo o uso de um tipo de letra personalizado (como o Bitstream Vera Sans, licenciado para redistribuição) que pode não ter esse problema. Eu não tenho certeza especificamente se isso ocorre ou não.
fonte
Você pode tentar usar este atributo (ConstraintLayout):
layout_constraintBaseline_toBaselineOf
Como isso:
fonte
Eu removo o espaçamento na minha exibição personalizada - NoPaddingTextView.
https://github.com/SenhLinsh/NoPaddingTextView
fonte
Com um ImageView extra, podemos definir o TextView para ser alinhado à linha de base com o ImageView e definir o
android:baselineAlignBottom
o ImageView como true, o que fará com que a linha de base do ImageView seja inferior. Outras visualizações podem se alinhar usando a parte inferior do ImageView, que é igual à linha de base do TextView.No entanto, isso apenas fixa a parte inferior do estofamento e não a parte superior.
fonte
Eu acho que esse problema pode ser resolvido desta maneira:
Esses são os resultados:
ScreenShot-1
ScreenShot-3
Embora a linha de caracteres especiais no rightLowerText pareça um pouco maior que a segunda linha do leftText, suas linhas de base ainda estão alinhadas.
fonte
Como meu requisito é substituir o textView existente
findViewById(getResources().getIdentifier("xxx", "id", "android"));
, não posso simplesmente tentaronDraw()
outra resposta.Mas acabei de descobrir as etapas corretas para corrigir meu problema. Aqui está o resultado final do Layout Inspector:
Como o que eu queria era apenas remover os espaços superiores, não preciso escolher outra fonte para remover os espaços inferiores.
Aqui está o código crítico para corrigi-lo:
A primeira chave é definir a fonte personalizada "fonts / myCustomFont.otf", que tem o espaço na parte inferior, mas não na parte superior. Você pode descobrir isso facilmente, abra o arquivo otf e clique em qualquer fonte no Android Studio:
Como você pode ver, o cursor na parte inferior tem espaçamento extra, mas não na parte superior, por isso resolveu o meu problema.
A segunda chave é que você não pode simplesmente pular nenhum código , caso contrário ele pode não funcionar. Essa é a razão pela qual você pode encontrar algumas pessoas que comentam que uma resposta está funcionando e outras que não estão funcionando.
Vamos ilustrar o que acontecerá se eu remover um deles.
Sem
setTypeface(mfont);
:Sem
setPadding(0, 0, 0, 0);
:Sem
setIncludeFontPadding(false);
:Sem três deles (ou seja, o original):
fonte
A única coisa que funcionou é
fonte
XML atualizado
fonte
Método simples trabalhado:
Se não funcionou, tente adicionar isso acima desse código:
Se você precisar de várias linhas, talvez seja necessário calcular exatamente a altura do preenchimento superior e inferior através do TextView de linha única temporária (antes e depois de remover o preenchimento) e, em seguida, aplique o resultado da diminuição da altura com preenchimento negativo ou algum layout do Ghost com tradução Y. Ri muito
fonte
Convém tentar alinhar a parte inferior da visualização de texto esquerda com a parte inferior da 2ª visualização de texto direita.
fonte
Que eu saiba, isso é inerente à maioria dos widgets e a quantidade de "preenchimento" difere entre os fabricantes de telefones. Esse preenchimento é realmente um espaço em branco entre a borda da imagem e a imagem no arquivo de 9 imagens de correção.
Por exemplo, no meu Droid X, os widgets giratórios ganham espaço em branco extra que os botões, o que torna estranho quando você tem um girador embutido com um botão, mas no telefone da minha esposa o mesmo aplicativo não tem o mesmo problema e parece ótimo!
A única sugestão que eu teria é criar seus próprios 9 arquivos de patch e usá-los em seu aplicativo.
Ahhh as dores que são Android.
Editado: esclarecer preenchimento x espaço em branco.
fonte
Este truque funcionou para mim (para min-sdk> = 18 ).
Eu usei
android:includeFontPadding="false"
e uma margem negativa comoandroid:layout_marginTop="-11dp"
e colocar meuTextView
dentro de umFrameLayout
( ou qualquer ViewGroup ... )e finalmente exemplos de códigos:
fonte
Veja isso:
Alinhar o ImageView com o EditText horizontalmente
Parece que a imagem de fundo do EditText possui alguns pixels transparentes que também adicionam preenchimento.
Uma solução é alterar o plano de fundo padrão do EditText para outra coisa (ou nada, mas nenhum plano de fundo para um EditText provavelmente não é aceitável). Isso pode ser feito configurando o atributo XML android: background.
fonte
Basta usar
fonte
Use isso no seu ImageView xml
android: AdjustViewBounds = "true"
fonte