Por padrão, o ProgressBar tem um certo preenchimento acima e abaixo da própria barra. Existe uma maneira de remover esse preenchimento para ter apenas a barra no final?
android
android-progressbar
abergmeier
fonte
fonte
maxHeight
não funciona.android:minHeight="4dp"
Respostas:
Eu uso o seguinte como uma solução alternativa para esse problema.
fonte
android:layout_marginTop="-6dp"
trabalhou para mim. Gostaria de saber se é dependente do dispositivo? Eu só testei no Xperia Z1Framelayout
(como em esta resposta é melhor solução e não depende do tamanho do telefone / tipo de versão / osFoi assim que usei a resposta de Juozas:
altura do meu
ProgressBar
é 4dp. Então eu criei umFrameLayout
com altura 4dp e defina olayout_gravity
deProgressBar
comocenter
. Funciona como um encanto.fonte
Acabei usando uma biblioteca personalizada para resolver esse problema. A maioria das outras soluções funciona, mas os resultados não são consistentes em vários dispositivos.
Para adicionar como uma dependência gradle:
Para adicionar uma ProgressBar sem preenchimento intrínseco ao seu layout:
app:mpb_useIntrinsicPadding="false"
faz o truque. Para mais detalhes, consulte a página do GitHub .fonte
Se alguém ainda precisar de ajuda, tente o seguinte:
Aqui, a barra de progresso está dentro do ConstraintLayout , e os constraintTop_toTopOf e constraintBottom_toTopOf atributos devem ser aplicados ao mesmo elemento (neste caso, é diretriz).
fonte
É possível desenhar ProgressBar verticalmente centralizado dentro de um pai que cortaria o preenchimento. Como o ProgressBar não pode se desenhar maior que o pai, precisamos criar um pai grande para colocar dentro de uma exibição de recorte.
fonte
Para remover o preenchimento vertical
ProgressBar
, você pode fazer issoProgressBar
O exemplo contém 1 wrap_content
ProgressBar
, 1 8dpProgressBar
, 1 100dpProgressBar
fonte
Uma solução completa para esse problema seria a seguinte. Caso alguém precise de fragmentos de código, foi isso que eu fiz.
Aqui está o arquivo progress_indeterminate_horizontal_holo.xml
Recursos de estilo copiados para o meu arquivo de estilos local.
E, finalmente, defina a altura mínima como 4dp no meu arquivo de layout local.
fonte
<your-sdk-folder>/platforms/android-17/data/res/drawable-hdpi/
Encontrei o mesmo problema ao usar a barra de progresso com o estilo horizontal.
A causa principal é que o drawable padrão de 9 correções para a barra de progresso: (progress_bg_holo_dark.9.png) possui alguns pixels verticais transparentes como preenchimento.
A solução final que funcionou para mim: personalizar o progresso desenhável, meu código de exemplo da seguinte forma:
custom_horizontal_progressbar_drawable.xml
snippet de layout:
fonte
Um truque é adicionar margens negativas à sua barra de progresso.
Abaixo está um exemplo do código XML, supondo que ele esteja na parte superior da tela:
fonte
A resposta de Subin parece ser a única (atualmente) que não é um hack frágil sujeito a falhas em versões futuras do Android ProgressBar.
Mas, em vez de ter o trabalho de dividir os recursos, modificá-los e mantê-los indefinidamente, optei por usar a biblioteca MaterialProgressBar , que faz isso por nós:
No build.gradle:
Esse projeto tem uma boa demonstração que mostra as diferenças entre ele e o ProgressBar interno.
fonte
se alguém ainda estiver procurando uma solução - verifique este comentário
defina a altura mínima para 4 dp
-
fonte
Eu uso minHeight e maxHeigh. Ajuda para diferentes versões da API.
Ele precisa usar os dois. A API 23 funciona bem com
Porém, versões mais baixas da API aumentam a altura da barra de progresso para maxHeight nesse caso.
fonte
Tente o seguinte:
... e, em seguida, configure a barra de progresso de acordo com as suas necessidades, pois ela exibirá inicialmente uma barra de tamanho médio com uma tonalidade de progresso amarela e uma tonalidade de fundo cinza de progresso. Além disso, observe que não há preenchimento vertical.
fonte
Use assim, dentro do Linearlayout
fonte
adicionar o android: progressDrawable a uma lista de camadas definida no drawable corrigiu o problema para mim. Ele funciona mascarando a barra de progresso em um drawable personalizado
exemplo de implementação descrito em https://stackoverflow.com/a/4454450/1145905
fonte
Estou usando
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
e foi bastante fácil se livrar das margens. Esse estilo é:Acabei de substituir a altura mínima / máxima:
fonte
Não é necessário baixar nenhum novo módulo ou até mesmo colocar um FrameLayout na barra de progresso. Estes são todos apenas hacks. Apenas 2 etapas:
No seu Whatever.xml
progress_horizontal.xml, altere os valores como desejar.
Não gosta dos cantos arredondados?
Remover raio do canto
Não gosta das cores? Mude as cores, etc. Feito!
Geralmente, estas são as etapas para alterar o código de qualquer coisa que você não gosta. Basta encontrar o código fonte e descobrir o que mudar. Se você seguir o código-fonte ProgressBar, encontrará um arquivo chamado progress_horizontal.xml que ele faz referência. Basicamente, como eu resolvo todos os meus problemas de XML.
fonte
fonte
fonte
Basta usar o Material ProgressIndicator que não possui margem oculta.
fonte
Uma solução simples não-truques que é compatível com qualquer versão do Android e não precisa de bibliotecas externas está fingindo
ProgressBar
com doisViews
interiorLinearLayout
. Foi assim que acabei. Parece bastante elegante e essa abordagem é bastante flexível - você pode animar de maneiras divertidas, adicionar texto etc.Layout:
Código:
Resultado (com alguma elevação adicionada):
fonte
A melhor solução deve ser
Nenhuma solução alternativa e funciona como um encanto.
fonte
minHeight
tamanho maior que 0 (digamos, 32dp talvez) predefinido. Ao alterar essa propriedade, você obtém uma aparência diferente.