Entfernen Sie die vertikale Polsterung von der horizontalen ProgressBar

126

Standardmäßig hat die ProgressBar eine bestimmte Polsterung über und unter der Leiste. Gibt es eine Möglichkeit, diese Polsterung zu entfernen, um nur die Stange am Ende zu haben?

abergmeier
quelle
7
Wie in anderen Themen erwähnt maxHeight, funktioniert die Einstellung nicht.
Abergmeier
android:minHeight="4dp"
Sam Chen

Antworten:

71

Ich verwende Folgendes als Problemumgehung für dieses Problem.

android:layout_marginBottom="-8dp"
android:layout_marginTop="-4dp"
Stephen Wan
quelle
1
Ich brauchte layout_marginBottom nicht.
AlikElzin-Kilaka
11
android:layout_marginTop="-6dp"arbeitete für mich. Frage mich, ob es vom Gerät abhängig ist? Ich habe nur auf Xperia Z1
Thorbjørn Kappel Hansen
2
@ ThorbjørnKappelHansen Es ist geräteabhängig. Das Galaxy S6 und ein Rand von -6dp funktionieren nicht wie gewünscht.
Muhammad Abdul-Rahim
1
Ich denke, die Ränder würden von der Größe des Fortschrittsbalkens und der Android-Version abhängen.
Noel
2
Verwenden Framelayout(wie in dieser Antwort ist bessere Lösung und nicht abhängig von Telefongröße / Typ /
Betriebssystem-
56

So habe ich Juozas 'Antwort verwendet:

Höhe von mir ProgressBarist 4dp. Also habe ich ein FrameLayoutmit Höhe 4dp erstellt und das layout_gravityvon ProgressBarauf gesetzt center. Es funktioniert wie ein Zauber.

<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>
penduDev
quelle
23
Dies ist eine gute Idee, aber Ihr Code hat unter Android 7.0 mit der Fortschrittsanzeige der Support-Bibliothek bei mir nicht funktioniert. Die Stange wurde nur dünner, hatte aber oben noch Polsterung.
Sam
4
@ Sam Machen Sie einfach die ProgressBar zB height = 100dp. Aufgrund des FrameLayout bleibt es immer noch 4dp, aber der Balken sieht dicker aus.
Megaetron
5
Funktioniert nicht mit API 24+. Die Stange wird immer dünner, egal wie groß wir sie einstellen.
Mauker
35

Am Ende habe ich eine benutzerdefinierte Bibliothek verwendet, um dieses Problem zu lösen. Die meisten anderen Lösungen funktionieren, aber die Ergebnisse sind auf verschiedenen Geräten nicht konsistent.

MaterialProgressBar

  • Konsistentes Erscheinungsbild unter Android 4.0+.
  • Korrigieren Sie plattformübergreifend.
  • Kann die intrinsische Polsterung des Frameworks ProgressBar entfernen.
  • Kann die Spur der horizontalen ProgressBar des Frameworks ausblenden.
  • Wird als Drop-In-Ersatz für das Framework ProgressBar verwendet.

So fügen Sie eine Gradle-Abhängigkeit hinzu:

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

So fügen Sie Ihrem Layout eine ProgressBar ohne Eigenauffüllung hinzu:

<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"macht den Trick. Weitere Informationen finden Sie auf der GitHub-Seite .

Binoy Babu
quelle
Zuerst habe ich versucht zu vermeiden, eine weitere Abhängigkeit hinzuzufügen, nur um etwas Polsterung zu entfernen. Aber alle anderen Lösungen scheiterten auf die eine oder andere Weise / Version und am Ende waren es ungefähr 3 Minuten, damit es funktioniert !! Danke dir.
ToniTornado
32
Eine ganze Bibliothek, nur um die Auffüllung einer Ansicht zu korrigieren. Weiter so Google.
Denny
Sie können @ style / Widget.AppCompat.ProgressBar.Horizontal für die oben genannten verwenden (abhängig von Ihrem Setup)
oder
30

Wenn jemand noch Hilfe benötigt, kann er dies versuchen:

<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" />

Hier befindet sich der Fortschrittsbalken im ConstraintLayout , und die Attribute ConstraintTop_toTopOf und ConstraintBottom_toTopOf müssen auf dasselbe Element angewendet werden (in diesem Fall handelt es sich um eine Richtlinie).

Ali_Waris
quelle
4
Dies sollte als die richtige Antwort markiert werden, da es perfekt funktioniert!
Philio
1
Das ist die richtige Antwort! Sie sind kompatibel mit allen Geräten (die nicht als negativer Rand bereitgestellt werden) und Android-Versionen (die nicht von der Frame-Layout-Lösung bereitgestellt werden). Außerdem müssen Sie nicht alle erforderlichen Arbeiten ausführen, indem Sie die System-Drawables in die App importieren (was nicht für alle Android-Versionen eine einheitliche Benutzeroberfläche im gesamten System bietet).
Vaios
2
@Ali_Waris Vielen Dank, dass Sie eine Antwort gepostet haben. Ich möchte diese Lösung so verstehen, dass sie nicht funktioniert. Könnten Sie die Antwort um das ConstraintLayout und die Richtlinie für die Antwort erweitern?
Scottyab
16

Es ist möglich, vertikal zentrierte ProgressBar in einem übergeordneten Element zu zeichnen, das die Polsterung abschneidet. Da ProgressBar sich nicht größer als das übergeordnete Element zeichnen kann, müssen wir ein großes übergeordnetes Element erstellen, um es in einer Schnittansicht zu platzieren.

<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>
Juozas Kontvainis
quelle
1
Dies funktionierte unter Android 7.0, führte jedoch bei meinem Sony Xperia M mit Android 4.1.2 zu keinem Fortschrittsbalken.
Sam
@ Sam danke für die Berichterstattung! Was sehen Sie, wenn Sie die Höhe des ersten FrameLayout von 4 dp auf 48 dp ändern?
Juozas Kontvainis
Der Fortschrittsbalken wird angezeigt, hat jedoch viel Polsterung darunter und ein kleines Stück Polsterung darüber.
Sam
@Sam Ich habe meine Antwort aktualisiert, hoffentlich funktioniert sie auf Ihrem Sony-Gerät akzeptabel. Wenn dies nicht hilft, empfehle ich, die Konfiguration Ihres Anwendungsthemas zu überprüfen. Die Verwendung des Holo-Themas in KitKat sollte das Problem beheben.
Juozas Kontvainis
15

Um die vertikale Polsterung von zu entfernen ProgressBar, können Sie dies tun

  • Fix die Höhe von ProgressBar
  • Verwenden Sie scaleY = "value" (value = height / 4) (4 ist die Standardhöhe des Fortschrittsbalkens)

Beispiel enthält 1 wrap_content ProgressBar, 1 8dp ProgressBar, 1 100dpProgressBar

Geben Sie hier die Bildbeschreibung ein

<ProgressBar
    style="?android:attr/progressBarStyleHorizontal"
    ...
    android:layout_height="8dp"
    android:scaleY="2" />
Phan Van Linh
quelle
14

Eine vollständige Lösung für dieses Problem wäre wie folgt. Nur für den Fall, dass jemand Codefragmente benötigt, habe ich dies getan.

  1. Kopierte alle 8 unbestimmten horizontalen Fortschrittsbalken-Drawables
  2. Bearbeiten Sie die Zeichen mit einem Bildmanipulator und entfernen Sie unnötige Auffüllungen
  3. Kopierte das zeichnbare XML mit dem Namen progress_indeterminate_horizontal_holo.xml von der Android-Plattform
  4. Kopierte den Stil Widget.ProgressBar.Horizontal und seine Eltern
  5. Stellen Sie den Stil und min_height manuell im Layout ein

Hier ist die 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" />

Stilressourcen in meine lokale Stildatei kopiert.

<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>

Und schließlich setzen Sie die minimale Höhe in meiner lokalen Layoutdatei auf 4 dp.

<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" />
Subin Sebastian
quelle
Woher können wir das in Schritt 1 erwähnte Zeichen kopieren: "1.Kopiert alle 8 unbestimmten horizontalen Fortschrittsbalken-Zeichen"?
Greenhand
3
@ JeffreyLin Ich habe es von diesem Ort kopiert<your-sdk-folder>/platforms/android-17/data/res/drawable-hdpi/
Subin Sebastian
33
Ist es nicht erstaunlich, wie viel Arbeit Sie tun müssen, um ein so vernünftiges Verhalten zu erreichen, das in Android standardmäßig verwendet werden sollte?
SpaceMonkey
1
Und für Materialdesign?
Mrroboaat
@aat Ich glaube nicht, dass Materialrichtlinien ähnliche Fortschrittsbalken haben. Bitte gehen Sie dieses Dokument durch: google.com/design/spec/components/…
Subin Sebastian
10

Ich habe das gleiche Problem bei der Verwendung des Fortschrittsbalkens mit horizontalem Stil festgestellt.

Die Hauptursache ist, dass der Standard-9-Patch, der für den Fortschrittsbalken gezeichnet werden kann: (progress_bg_holo_dark.9.png) einige vertikale transparente Pixel als Auffüllung enthält.

Die endgültige Lösung, die für mich funktioniert hat: Passen Sie den Zeichnungsfortschritt und meinen Beispielcode wie folgt an:

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>

Layout-Snippet:

<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"/>
emotionsfxxk
quelle
Dies ist wahrscheinlich die beste Lösung. Ihr Beispielcode hat auf meinem Sony Xperia M mit Android 4.1.2 jedoch keinen Fortschrittsbalken erzeugt.
Sam
8

Ein Trick besteht darin, Ihrem Fortschrittsbalken negative Ränder hinzuzufügen.

Unten finden Sie ein Beispiel für den XML-Code, vorausgesetzt, er befindet sich oben auf Ihrem Bildschirm:

<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" />

Ergebnis des Codes

chinmay.d
quelle
Das Hinzufügen negativer Ränder löste das Problem für mich. Vielen Dank!
icarovirtual
5

Subins Antwort scheint die einzige zu sein, die (derzeit) kein fragiler Hack ist, der in zukünftigen Versionen der Android ProgressBar beschädigt werden kann.

Aber anstatt mir die Mühe zu machen, die Ressourcen aufzubrechen, zu ändern und auf unbestimmte Zeit zu warten, habe ich mich für die MaterialProgressBar-Bibliothek entschieden , die das für uns erledigt:

<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'

Dieses Projekt hat eine schöne Demo , die die Unterschiede zwischen ihm und der eingebauten ProgressBar zeigt.

Stephen Talley
quelle
4

Wenn noch jemand nach einer Lösung sucht, überprüfen Sie diesen Kommentar

Stellen Sie die Mindesthöhe auf 4 dp ein

   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" />
ahmed ewess
quelle
Ich bevorzuge diese Antwort.
Sam Chen
2

Ich benutze minHeight und maxHeigh. Es hilft für verschiedene API-Versionen.

<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" />

Es muss beides verwenden. Api 23 funktioniert gut mit

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

Niedrigere API-Versionen erhöhen in diesem Fall jedoch die Höhe des Fortschrittsbalkens auf maxHeight.

Andrii Volynets
quelle
2

Versuche Folgendes:

<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" />

... und konfigurieren Sie dann den Fortschrittsbalken nach Ihren Wünschen, da zunächst ein mittelgroßer Balken mit einem gelben Fortschrittsfarbton und einem grauen Fortschrittshintergrund angezeigt wird. Beachten Sie auch, dass keine vertikale Polsterung vorhanden ist.

DaveNOTDavid
quelle
2

Verwenden Sie diese Option in 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>
Alizulfuqar
quelle
Funktioniert super! Beschreiben Sie beim nächsten Mal, was Ihr Code tut und welche Änderungen Sie vorgenommen haben. ;-)
Entwickler von Jokela
1

Das Hinzufügen von android: progressDrawable zu einer in drawable definierten Ebenenliste hat das Problem für mich behoben. Es funktioniert, indem die Fortschrittsleiste in einer benutzerdefinierten Zeichenleiste maskiert wird

Beispielimplementierung unter https://stackoverflow.com/a/4454450/1145905

kip2
quelle
1

Ich benutze style="@style/Widget.AppCompat.ProgressBar.Horizontal"und es war ziemlich einfach, die Ränder loszuwerden. Dieser Stil ist:

    <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>

Ich habe gerade die minimale / maximale Höhe überschrieben:

    <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" />
Anthony
quelle
Ich war nie zufrieden mit dem generischen Fortschrittsbalken und wandte mich am Ende einer Bibliothek zu: me.zhanghai.android.materialprogressbar.MaterialProgressBar
Anthony
1

Es ist nicht erforderlich, ein neues Modul herunterzuladen oder ein FrameLayout um Ihre Fortschrittsleiste zu legen. Dies sind alles nur Hacks. Nur 2 Schritte:

In Ihrer Whatever.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, Ändern Sie die Werte nach Ihren Wünschen.

Mögen Sie die abgerundeten Ecken nicht?
Eckenradius entfernen

Magst du die Farben nicht? Ändern Sie die Farben usw. Fertig!

<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>

Im Allgemeinen sind dies die Schritte, um den Code von allem zu ändern, was Ihnen nicht gefällt. Finden Sie einfach den Quellcode und finden Sie heraus, was Sie ändern müssen. Wenn Sie dem ProgressBar-Quellcode folgen, finden Sie eine Datei namens progress_horizontal.xml, auf die verwiesen wird. Grundsätzlich, wie ich alle meine XML-Probleme löse.

Daniel Kim
quelle
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" />
Mallem Mahesh
quelle
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"/>
ZIRES
quelle
Bitte geben Sie nicht einfach die Postleitzahl ein. Geben Sie Ihrer Antwort einen Kontext.
Martin Gal
0

Verwenden Sie einfach Material ProgressIndicator, der keinen versteckten Rand hat.

<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" />
Devgun
quelle
-1

Eine einfache No-Tricks-Lösung, die mit jeder Android-Version kompatibel ist und keine externen Bibliotheken benötigt, fälscht ProgressBarzwei im ViewsInneren LinearLayout. Damit bin ich gelandet. Sieht ziemlich ordentlich aus und dieser Ansatz ist ziemlich flexibel - Sie können ihn auf funky Weise animieren, Text hinzufügen usw.

Layout:

<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>

Code:

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);

}

Ergebnis (mit etwas Höhe hinzugefügt):

Geben Sie hier die Bildbeschreibung ein

Janeks Bergs
quelle
-1

Die beste Lösung sollte sein

android:minHeight="0dp"

Keine Problemumgehung und funktioniert wie ein Zauber.

Alex Fan
quelle
hat nicht funktioniert, können Sie bitte erklären, warum dies funktionieren sollte?
bescheidener Wolf
@humble_wolf In meinem vorherigen Projekt hat es für mich funktioniert, als ich die Antwort schrieb. könnte von einer bestimmten Version der Bibliothek abhängig sein? Es sollte funktionieren, da der Grund dafür, dass es eine Auffüllung für den Fortschrittsbalken gibt, nicht die tatsächliche Auffüllung ist, sondern eine minHeight, die größer als 0 ist (sagen wir 32dp vielleicht), vordefiniert. Durch Ändern dieser Eigenschaft erhalten Sie ein anderes Aussehen.
Alex Fan
Hat bei mir im Inderminate = True-Modus nicht funktioniert, vielleicht im Determinate-Modus. Wenn Sie wirklich möchten, dass dies eine Antwort ist, schreiben Sie bitte die Erklärung als Antwort mit allen Bedingungen.
bescheidene_Wolf