Rimuovere il riempimento verticale dalla ProgressBar orizzontale


127

Per impostazione predefinita, la ProgressBar ha un certo riempimento sopra e sotto la barra stessa. C'è un modo per rimuovere questa imbottitura in modo da avere solo la barra alla fine?


7
Come notato in altri argomenti, l'impostazione maxHeightnon funziona.
abergmeier

android:minHeight="4dp"
Sam Chen,

Risposte:


72

Uso quanto segue come soluzione alternativa per questo problema.

android:layout_marginBottom="-8dp"
android:layout_marginTop="-4dp"

1
Non avevo bisogno di layout_marginBottom.
AlikElzin-kilaka

11
android:layout_marginTop="-6dp"ha funzionato per me. Mi chiedo se dipende dal dispositivo? Ho provato solo su Xperia Z1
Thorbjørn Kappel Hansen

2
@ ThorbjørnKappelHansen Dipende dal dispositivo. Galaxy S6 e un margine superiore di -6dp non funzionano come desiderato.
Muhammad Abdul-Rahim

1
Penso che i margini dipenderanno dalla dimensione della barra di avanzamento e dalla versione di Android.
Noel

2
utilizzando Framelayout(come in questa risposta è una soluzione migliore e non dipende dalle dimensioni del telefono / tipo / versione del sistema
operativo

57

Ecco come ho usato la risposta di Juozas:

l'altezza del mio ProgressBarè 4dp. Quindi ho creato un FrameLayoutcon altezza 4dp e ho impostato il layout_gravitydi ProgressBarsu center. Funziona come un incantesimo.

<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="4dp">

    <ProgressBar
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="match_parent"
        android:layout_height="4dp"
        android:layout_gravity="center"
        android:indeterminate="true"/>

</FrameLayout>

23
Questa è una buona idea, ma il tuo codice non ha funzionato per me su Android 7.0 utilizzando la barra di avanzamento della libreria di supporto. La barra è appena diventata più sottile ma aveva ancora l'imbottitura nella parte superiore.
Sam

4
@ Sam Basta creare la ProgressBar, ad es. Altezza = 100dp. A causa del FrameLayout rimane ancora 4dp ma la barra sembra più spessa.
Megaetron

5
Non funziona su API 24+. La barra diventa sempre più sottile indipendentemente dalle dimensioni che abbiamo impostato su di essa.
Mauker

36

Ho finito per utilizzare una libreria personalizzata per risolvere questo problema. La maggior parte delle altre soluzioni funziona ma i risultati non sono coerenti su vari dispositivi.

MaterialProgressBar

  • Aspetto coerente su Android 4.0+.
  • Correggere la colorazione sulle piattaforme.
  • In grado di rimuovere il riempimento intrinseco del framework ProgressBar.
  • Capace di nascondere la traccia del quadro ProgressBar orizzontale.
  • Usato come sostituto immediato del framework ProgressBar.

Per aggiungere come dipendenza gradle:

compile 'me.zhanghai.android.materialprogressbar:library:1.1.7'

Per aggiungere una ProgressBar senza riempimento intrinseco al layout:

<me.zhanghai.android.materialprogressbar.MaterialProgressBar
    android:layout_width="wrap_content"
    android:layout_height="4dp"
    android:indeterminate="true"
    app:mpb_progressStyle="horizontal"
    app:mpb_useIntrinsicPadding="false"
    style="@style/Widget.MaterialProgressBar.ProgressBar.Horizontal" />

app:mpb_useIntrinsicPadding="false"fa il trucco. Per maggiori dettagli vedere la pagina GitHub .


Per prima cosa ho cercato di evitare di aggiungere un'altra dipendenza solo per rimuovere un po 'di riempimento. Ma tutte le altre soluzioni sono fallite in uno o nell'altro modo / versione e alla fine sono bastati 3 minuti per farlo funzionare !! Grazie.
ToniTornado

32
Un'intera libreria solo per correggere il riempimento di una vista. Ben fatto, Google.
Denny

Si consiglia di utilizzare @ style / Widget.AppCompat.ProgressBar.Horizontal per quanto sopra (a seconda della configurazione)
ror

32

Se qualcuno ha ancora bisogno di aiuto può provare questo:

<androidx.core.widget.ContentLoadingProgressBar
    android:id="@+id/progress"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    style="@style/Widget.AppCompat.ProgressBar.Horizontal"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintTop_toTopOf="@+id/guideline"
    android:indeterminate="true"
    android:visibility="visible"
    app:layout_constraintBottom_toTopOf="@+id/guideline" />

Qui, la barra di avanzamento è all'interno di ConstraintLayout e gli attributi constraintTop_toTopOf e constraintBottom_toTopOf devono essere applicati allo stesso elemento (in questo caso, è la linea guida).

*** SOLUZIONE COMPLETA: ***

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="48dp">

<View
    android:id="@+id/guideline"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:orientation="vertical"
    android:visibility="invisible"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent" />

<ProgressBar
    android:id="@+id/progress_bar"
    style="?android:attr/progressBarStyleHorizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:indeterminate="true"
    app:layout_constraintBottom_toTopOf="@+id/guideline"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="@+id/guideline" />
</androidx.constraintlayout.widget.ConstraintLayout>

5
Questo dovrebbe essere contrassegnato come la risposta corretta poiché funziona perfettamente!
Philio

1
Questa è la risposta esatta! Sei compatibile con tutti i dispositivi (che non viene fornito con margine negativo) e con le versioni di Android (che non è fornito dalla soluzione di layout del frame). Inoltre, non è necessario eseguire tutto il lavoro necessario importando i drawables di sistema nell'app (che non fornisce un'interfaccia utente coerente in tutto il sistema per tutte le versioni di Android).
Vaios

2
@Ali_Waris grazie per aver pubblicato una risposta, sono ansioso di capire questa soluzione come incapace di farla funzionare. Potresti espandere la risposta per includere ConstraintLayout e le linee guida per la risposta?
scottyab

Qual è la linea guida qui? Dove andrà?
iamgopal

invece della linea guida puoi usare la visualizzazione vuota <Visualizza app: layout_constraintStart_toStartOf = "genitore" app: layout_constraintEnd_toEndOf = "genitore" android: id = "@ + id / guideline" android: layout_width = "0dp" android: layout_height = "0dp" android : Orientamento = "verticale" android: visibilità = app "invisibile": layout_constraintBottom_toBottomOf = "genitore" />
Kochchy

16

È possibile disegnare ProgressBar centrato verticalmente all'interno di un genitore che taglierebbe via il riempimento. Poiché ProgressBar non può disegnare se stesso più grande del genitore, dobbiamo creare un genitore grande da posizionare all'interno di una vista di ritaglio.

<FrameLayout
    android:id="@+id/clippedProgressBar"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="4dp"
    tools:ignore="UselessParent">

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="16dp"
        android:layout_gravity="center_vertical">

        <ProgressBar
            style="?android:attr/progressBarStyleHorizontal"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:indeterminate="true"/>

    </FrameLayout>

</FrameLayout>

1
Funzionava su Android 7.0, ma non mostrava alcuna barra di avanzamento sul mio Sony Xperia M con Android 4.1.2.
Sam

@ Sam, grazie per la segnalazione! Cosa vedi se modifichi l'altezza del primo FrameLayout da 4dp a 48dp?
Juozas Kontvainis

Viene visualizzata la barra di avanzamento, ma ha un sacco di imbottitura sotto e un po 'di imbottitura sopra.
Sam

@ Sam ho aggiornato la mia risposta, spero che funzioni in modo accettabile sul tuo dispositivo Sony. Se non aiuta, suggerisco di rivedere la configurazione del tema dell'applicazione. L'utilizzo del tema Holo su KitKat dovrebbe risolverlo.
Juozas Kontvainis

15

Per rimuovere l'imbottitura verticale di ProgressBar, puoi farlo

  • fissare l'altezza di ProgressBar
  • Usa scaleY = "value" (value = height / 4) (4 è l'altezza predefinita della barra di avanzamento)

L'esempio contiene 1 wrap_content ProgressBar, 1 8dp ProgressBar, 1 100dpProgressBar

inserisci qui la descrizione dell'immagine

<ProgressBar
    style="?android:attr/progressBarStyleHorizontal"
    ...
    android:layout_height="8dp"
    android:scaleY="2" />

14

Una soluzione completa a questo problema sarebbe la seguente. Nel caso in cui qualcuno avesse bisogno di frammenti di codice, questo è quello che ho fatto.

  1. Copiato tutti gli 8 drawables indeterminati della barra di avanzamento orizzontale
  2. Modificato i drawables utilizzando un manipolatore di immagini e rimuovi le imbottiture non necessarie
  3. Copiato l'XML disegnabile denominato progress_indeterminate_horizontal_holo.xml dalla piattaforma Android
  4. Copiato lo stile Widget.ProgressBar.Horizontal e i suoi genitori
  5. Imposta lo stile e l'altezza min_min manualmente nel layout

Ecco il progress_indeterminate_horizontal_holo.xml

<animation-list
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">
<item android:drawable="@drawable/progressbar_indeterminate_holo1" android:duration="50" />
<item android:drawable="@drawable/progressbar_indeterminate_holo2" android:duration="50" />
<item android:drawable="@drawable/progressbar_indeterminate_holo3" android:duration="50" />
<item android:drawable="@drawable/progressbar_indeterminate_holo4" android:duration="50" />
<item android:drawable="@drawable/progressbar_indeterminate_holo5" android:duration="50" />
<item android:drawable="@drawable/progressbar_indeterminate_holo6" android:duration="50" />
<item android:drawable="@drawable/progressbar_indeterminate_holo7" android:duration="50" />
<item android:drawable="@drawable/progressbar_indeterminate_holo8" android:duration="50" />

Risorse di stile copiate nel mio file di stili locale.

<style name="Widget">
    <item name="android:textAppearance">@android:attr/textAppearance</item>
</style>

<style name="Widget.ProgressBar">
    <item name="android:indeterminateOnly">true</item>
    <item name="android:indeterminateBehavior">repeat</item>
    <item name="android:indeterminateDuration">3500</item>
</style>

<style name="Widget.ProgressBar.Horizontal">
    <item name="android:indeterminateOnly">false</item>
    <item name="android:indeterminateDrawable">@drawable/progress_indeterminate_horizontal_holo</item>
</style>

Infine, imposta l'altezza minima su 4dp nel mio file di layout locale.

<ProgressBar
    android:id="@+id/pb_loading"
    style="@style/Widget.ProgressBar.Horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:indeterminate="true"
    android:minHeight="4dp"
    android:minWidth="48dp"
    android:progressDrawable="@drawable/progress_indeterminate_horizontal_holo" />

Da dove possiamo copiare il drawable menzionato al punto 1: "1.Copiato tutti gli 8 drawables indeterminati della barra di progressione orizzontale"?
Greenhand

3
@JeffreyLin L'ho copiato da questa posizione<your-sdk-folder>/platforms/android-17/data/res/drawable-hdpi/
Subin Sebastian

33
Non è sorprendente quanto lavoro devi fare per ottenere un comportamento di buon senso che dovrebbe venire di default in Android?
SpaceMonkey

1
E per il material design?
mrroboa

@aat Non credo che le linee guida sui materiali abbiano barre di progresso simili. Consulta questo documento: google.com/design/spec/components/…
Subin Sebastian

10

Ho incontrato lo stesso problema durante l'utilizzo della barra di avanzamento con lo stile orizzontale.

La causa principale è che il disegno predefinito di 9 patch per la barra di avanzamento: (progress_bg_holo_dark.9.png) ha alcuni pixel trasparenti verticali come riempimento.

La soluzione finale che ha funzionato per me: personalizza i progressi disegnabili, il mio codice di esempio come segue:

custom_horizontal_progressbar_drawable.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@android:id/background">
        <shape android:shape="rectangle">
            <solid android:color="#33ffffff" />
        </shape>
    </item>
    <item android:id="@android:id/secondaryProgress">
        <clip>
            <shape android:shape="rectangle">
                <solid android:color="#ff9800" />
            </shape>
        </clip>
    </item>
    <item android:id="@android:id/progress">
        <clip>
            <shape android:shape="rectangle">
                <solid android:color="#E91E63" />
            </shape>
        </clip>
    </item>
</layer-list>

snippet di layout:

<ProgressBar
    android:id="@+id/song_progress_normal"
    style="@style/Widget.AppCompat.ProgressBar.Horizontal"
    android:layout_width="match_parent"
    android:layout_height="5dp"
    android:layout_alignParentBottom="true"
    android:progressDrawable="@drawable/custom_horizontal_progressbar_drawable"
    android:progress="0"/>

Questa è probabilmente la soluzione migliore. Tuttavia, il codice di esempio non ha prodotto alcuna barra di avanzamento sul mio Sony Xperia M con Android 4.1.2.
Sam

8

Un trucco è aggiungere margini negativi alla barra di avanzamento.

Di seguito è riportato un esempio del codice XML, assumendo che sia nella parte superiore dello schermo:

<ProgressBar
    android:id="@+id/progressBar"
    style="@style/Widget.AppCompat.ProgressBar.Horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="-7dp"
    android:layout_marginBottom="-7dp"
    android:indeterminate="true" />

risultato del codice


L'aggiunta di margini negativi ha risolto il problema per me. Grazie!
icarovirtual

5

La risposta di Subin sembra essere l'unica (attualmente) che non è un fragile hack soggetto a rotture nelle versioni future di Android ProgressBar.

Ma piuttosto che passare attraverso il problema di rompere le risorse, modificarle e mantenerle a tempo indeterminato, ho scelto di utilizzare la libreria MaterialProgressBar , che fa questo per noi:

<me.zhanghai.android.materialprogressbar.MaterialProgressBar
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:indeterminate="true"
    android:layout_gravity="bottom"
    custom:mpb_progressStyle="horizontal"
    custom:mpb_showTrack="false"
    custom:mpb_useIntrinsicPadding="false"
    style="@style/Widget.MaterialProgressBar.ProgressBar.Horizontal.NoPadding"
/>

In build.gradle:

// Android horizontal ProgressBar doesn't allow removal of top/bottom padding
compile 'me.zhanghai.android.materialprogressbar:library:1.1.6'

Quel progetto ha una bella demo che mostra le differenze tra esso e la ProgressBar incorporata.


4

se qualcuno sta ancora cercando una soluzione, controlla questo commento

impostare l'altezza minima a 4 dp

   android:minHeight="4dp"

-

  <ProgressBar
    android:id="@+id/web_view_progress_bar"
    style="@style/Widget.AppCompat.ProgressBar.Horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:indeterminate="false"
    android:max="100"
    android:min="0"
    android:progress="5"
    android:minHeight="4dp"
    android:progressTint="@color/vodafone_red"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    tools:progress="60" />

Preferisco questa risposta.
Sam Chen

2

Uso minHeight e maxHeigh. Aiuta per diverse versioni di API.

<ProgressBar
    android:id="@+id/progress_bar"
    style="@style/Base.Widget.AppCompat.ProgressBar.Horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:maxHeight="3dp"
    android:minHeight="3dp" />

Deve utilizzare entrambi. Api 23 funziona bene con

android:layout_height="wrap_content"
android:minHeight="0dp"

Ma le versioni inferiori di Api aumentano l'altezza della barra di avanzamento a maxHeight in questo caso.


2

Prova quanto segue:

<ProgressBar
    android:id="@+id/progress_bar"
    style="@android:style/Widget.ProgressBar.Horizontal"
    android:progress="25"
    android:progressTint="@color/colorWhite"
    android:progressBackgroundTint="@color/colorPrimaryLight"
    android:layout_width="match_parent"
    android:layout_height="4dp" />

... e quindi configurare la barra di avanzamento in base alle proprie esigenze poiché inizialmente visualizzerà una barra di medie dimensioni con una tinta di avanzamento di colore giallo con una tinta di sfondo di avanzamento grigiastro. Inoltre, nota che non c'è imbottitura verticale.


2

Usa in questo modo, all'interno di Linearlayout

 <LinearLayout
        android:layout_width="match_parent"
        android:background="#efefef"
        android:layout_height="wrap_content">

        <ProgressBar
            android:id="@+id/progressBar"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:indeterminate="true"
            android:visibility="gone"
            android:layout_marginTop="-7dp"
            android:layout_marginBottom="-7dp"
            style="@style/Widget.AppCompat.ProgressBar.Horizontal"
            />

    </LinearLayout>

Funziona alla grande! La prossima volta descrivi cosa fa il codice e quali modifiche hai apportato. ;-)
Sviluppatore da Jokela il

1

l'aggiunta di android: progressDrawable a un elenco di livelli definito in drawable ha risolto il problema per me. Funziona mascherando la barra di avanzamento in un disegnabile personalizzato

esempio di implementazione descritta su https://stackoverflow.com/a/4454450/1145905


1

Sto usando style="@style/Widget.AppCompat.ProgressBar.Horizontal"ed è stato abbastanza facile sbarazzarsi dei margini. Quello stile è:

    <item name="progressDrawable">@drawable/progress_horizontal_material</item>
    <item name="indeterminateDrawable">@drawable/progress_indeterminate_horizontal_material</item>
    <item name="minHeight">16dip</item>
    <item name="maxHeight">16dip</item>

Ho appena sovrascritto l'altezza min / max:

    <ProgressBar
        style="@style/Widget.AppCompat.ProgressBar.Horizontal"
        android:layout_width="match_parent"
        android:layout_height="2dp"
        android:indeterminate="true"
        android:minHeight="2dp"
        android:maxHeight="2dp" />

Non sono mai stato soddisfatto della barra di avanzamento generica e alla fine mi sono rivolto a una libreria: me.zhanghai.android.materialprogressbar.MaterialProgressBar
Anthony

1

Non è necessario scaricare alcun nuovo modulo o persino inserire un FrameLayout attorno alla barra di avanzamento. Questi sono solo hack. Solo 2 passaggi:

Nel tuo any.xml

<ProgressBar
    android:id="@+id/workoutSessionGlobalProgress"
    android:layout_width="match_parent"
    android:layout_height="YOUR_HEIGHT"
    android:progressDrawable="@drawable/progress_horizontal"
    android:progress="0"
    <!-- High value to make ValueAnimator smoother -->
    android:max="DURATION * 1000"
    android:indeterminate="false"
    style="@style/Widget.MaterialProgressBar.ProgressBar.Horizontal"/>

progress_horizontal.xml, modifica i valori come preferisci.

Non ti piacciono gli angoli arrotondati?
Rimuovi il raggio dell'angolo

Non ti piacciono i colori? Cambia i colori, ecc. Fatto!

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:id="@android:id/background">
        <shape>
            <corners android:radius="5dip" />
            <gradient
                    android:startColor="#ff9d9e9d"
                    android:centerColor="#ff5a5d5a"
                    android:centerY="0.75"
                    android:endColor="#ff747674"
                    android:angle="270"
                    />
        </shape>
    </item>

    <item android:id="@android:id/secondaryProgress">
        <clip>
            <shape>
                <corners android:radius="5dip" />
                <gradient
                        android:startColor="#80ffd300"
                        android:centerColor="#80ffb600"
                        android:centerY="0.75"
                        android:endColor="#a0ffcb00"
                        android:angle="270"
                        />
            </shape>
        </clip>
    </item>

    <item android:id="@android:id/progress">
        <clip>
            <shape>
                <corners android:radius="5dip" />
                <gradient
                        android:startColor="#ffffd300"
                        android:centerColor="#ffffb600"
                        android:centerY="0.75"
                        android:endColor="#ffffcb00"
                        android:angle="270"
                        />
            </shape>
        </clip>
    </item>

</layer-list>

In generale, questi sono i passaggi per modificare il codice di tutto ciò che non ti piace. Basta trovare il codice sorgente e capire cosa cambiare. Se segui il codice sorgente di ProgressBar, troverai un file chiamato progress_horizontal.xml a cui fa riferimento. Fondamentalmente come risolvo tutti i miei problemi XML.


0
 <ProgressBar
        android:layout_marginTop="-8dp"
        android:layout_marginLeft="-8dp"
        android:layout_marginRight="-8dp"
        android:id="@+id/progress_bar"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="match_parent"
        android:layout_height="4dp"
        android:indeterminate="false"
        android:indeterminateTint="@color/white"
        android:max="100"
        android:paddingStart="8dp"
        android:paddingRight="0dp"
        android:progressDrawable="@drawable/progress_bg" />

0
<androidx.core.widget.ContentLoadingProgressBar
                    android:id="@+id/progressBar"
                    style="@style/Widget.AppCompat.ProgressBar.Horizontal"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:indeterminate="true"
                    android:paddingTop="2dp"
                    app:layout_constraintTop_toTopOf="parent"
                    app:layout_constraintBottom_toTopOf="parent"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintStart_toStartOf="parent"/>

Per favore, non inserire semplicemente il codice. Dai un contesto alla tua risposta.
Martin Gal,

0

Basta usare Material ProgressIndicator che non ha margini nascosti.

<com.google.android.material.progressindicator.ProgressIndicator
        android:id="@+id/progressBar"
        style="@style/Widget.MaterialComponents.ProgressIndicator.Linear.Indeterminate"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:indicatorColor="@color/colorPrimary"
        app:trackColor="@color/colorAccent" />

-1

Una semplice soluzione senza trucchi compatibile con qualsiasi versione di Android e che non necessita di librerie esterne è fingere ProgressBarcon due Viewsall'interno LinearLayout. Questo è ciò con cui sono finito. Sembra abbastanza pulito e questo approccio è abbastanza flessibile: puoi animarlo in modi stravaganti, aggiungere testo ecc.

Disposizione:

<LinearLayout
    android:id="@+id/inventory_progress_layout"
    android:layout_width="match_parent"
    android:layout_height="4dp"
    android:orientation="horizontal">

    <TextView
        android:id="@+id/inventory_progress_value"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <TextView
        android:id="@+id/inventory_progress_remaining"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>

Codice:

public void setProgressValue(float percentage) {
    TextView progressValue = (TextView) findViewById(R.id.inventory_progress_value);
    TextView progressRemaining = (TextView) findViewById(R.id.inventory_progress_remaining);

    LinearLayout.LayoutParams paramsValue = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
    LinearLayout.LayoutParams paramsRemaining = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);

    paramsValue.weight = (100 - percentage);
    paramsRemaining.weight = percentage;

    progressValue.setLayoutParams(paramsValue);
    progressRemaining.setLayoutParams(paramsRemaining);

}

Risultato (con l'aggiunta di qualche elevazione):

inserisci qui la descrizione dell'immagine


-1

La soluzione migliore dovrebbe essere

android:minHeight="0dp"

Nessuna soluzione alternativa e funziona come un fascino.


non ha funzionato, puoi spiegare perché dovrebbe funzionare?
humble_wolf

@humble_wolf Ha funzionato per me stesso nel mio progetto precedente quando ho scritto la risposta; potrebbe dipendere da qualche particolare versione della libreria? Dovrebbe funzionare perché il motivo per cui c'è un padding come cosa per la barra di avanzamento non è il padding effettivo ma c'è un minHeightvalore predefinito maggiore di 0 (diciamo 32dp forse). Modificando questa proprietà si ottiene un aspetto diverso.
Alex Fan

Non ha funzionato per me in modalità Inderminate = true, forse lavorando in modalità determinata. Se vuoi davvero che questa sia una risposta, scrivi la spiegazione in risposta con tutte le condizioni.
humble_wolf
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.