Wie stelle ich die Höhe des Android-Fortschrittsbalkens ein?

75

Mein activity_main.xmlist unten, wie Sie sehen, ist die Höhe 40 Dip eingestellt.

Und in MyEclipse sieht es wie folgt aus:

Geben Sie hier die Bildbeschreibung ein

Aber wenn ich es auf meinem Telefon starte, sieht es wie folgt aus:

Geben Sie hier die Bildbeschreibung ein

Meine Frage ist also, warum die tatsächliche Höhe des Fortschrittsbalkens nicht die von mir festgelegte ist. Wie kann man die Höhe des Fortschrittsbalkens erhöhen?

Tom Xue
quelle
3
progressBar.setScaleY (2f); Ganzzahl steht für Höhe
Subramanyam Chodi

Antworten:

46

Aus diesem Tutorial :

<style name="CustomProgressBarHorizontal" parent="android:Widget.ProgressBar.Horizontal">
      <item name="android:progressDrawable">@drawable/custom_progress_bar_horizontal</item>
      <item name="android:minHeight">10dip</item>
      <item name="android:maxHeight">20dip</item>
</style>

Wenden Sie den Stil dann einfach auf Ihre Fortschrittsbalken an oder überschreiben Sie den Standardstil in Ihrem Design, um alle Fortschrittsbalken Ihrer App automatisch zu formatieren.

Der Unterschied, den Sie in den Screenshots sehen, besteht darin, dass die Telefone / Emulatoren eine andere Android-Version verwenden (das neueste ist das Thema von ICS (Holo), oben das ursprüngliche Thema).

Vincent Mimoun-Prat
quelle
Verwenden Sie diesen Stil .. style = "@ android: style / Widget.Holo.Light.ProgressBar.Small.Inverse". Es hat für mich
funktioniert
Hier ist eine kostenlose Alternative zu diesem custom_progress_bar_horizontal drawable: stackoverflow.com/questions/16893209/…
Ashutosh Tiwari
197

Ich denke, die einfachste Lösung wäre:

mProgressBar.setScaleY(3f);
Martin Pfeffer
quelle
4
In der Tat ist dies die einzige Lösung. Vielen Dank für das Teilen
Jahrzehnte
2
Diese Antwort, nur 4f, machte meine Bar unerträglich verschwommen, fast so, als hätte sie einen Glühstil.
Beyondtheteal
@beyondtheteal hehe, aber die Höhe hat sich tatsächlich geändert, nicht wahr? Ich verstehe also nicht, warum Sie die Antwort ablehnen. Wenn Sie eine stark skalierte Leiste benötigen, können Sie Ihre eigene "CustomProgressBar" erstellen.
Martin Pfeffer
2
Beachten Sie, dass Sie, wenn Sie etwas darüber zeichnen (z. B. Kreis), eine skalierte Version davon erhalten (dh Ellipsen)
pushandpop
75

android: scaleY = "8" in deiner XML-Datei

Maksim Kniazev
quelle
20

Benutze das

style="@android:style/Widget.ProgressBar.Horizontal"

Piraba
quelle
15
Was hat Ihre Antwort mit dem Festlegen der benutzerdefinierten Höhe in der ProgressBar zu tun?
IgorGanapolsky
Dies löst das Problem. Können Sie erklären, warum dies funktioniert?
030
1
@ Alfred es funktioniert, weil der Stil anders ist. Der gezeichnete Teil der Widget ProgressBar wird so ausgedehnt, dass er zur gesamten layout_height passt, während dies bei der regulären Android ProgressBar nicht der Fall ist.
Chronik
2
Diese Lösung funktioniert !! zuvor habe ich verwendet ?android:attr/progressBarStyleHorizontal, das funktioniert nicht
Cheng
14

Wie in anderen Antworten erwähnt, scheinen Sie den Stil Ihres Fortschrittsbalkens für die Verwendung von Holo.Light festzulegen:

style="@android:style/Widget.Holo.Light.ProgressBar.Horizontal"

Wenn dies auf Ihrem Telefon ausgeführt wird, handelt es sich wahrscheinlich um ein Gerät ab 3.0. Ihr Emulator sieht jedoch so aus, als würde er einen "Standard" -Verfahrensbalken verwenden.

style="@android:style/Widget.ProgressBar.Horizontal"

Vielleicht haben Sie den Stil zwischen dem Erstellen der Screenshots in den Fortschrittsbalken "Standard" geändert? Leider kehren 2.x-Geräte nicht automatisch zum Standard-Fortschrittsbalken zurück, wenn Ihre Projekte einen Holo.Light-Fortschrittsbalken verwenden. Es wird einfach abstürzen.

Wenn Sie wirklich den Standard-Fortschrittsbalken verwenden, funktioniert das Einstellen der maximalen / minimalen Höhe wie vorgeschlagen einwandfrei. Wenn Sie jedoch die Holo.Light- (oder Holo) Leiste verwenden, funktioniert das Einstellen der maximalen / minimalen Höhe nicht. Hier ist eine Beispielausgabe aus der Einstellung der maximalen / minimalen Höhe auf 25 und 100 Dip:

max / min auf 25 dip eingestellt: 25 Eintauchhöhen-Fortschrittsbalken

max / min auf 100 dip eingestellt: Fortschrittsbalken mit 100 Tauchhöhen

Sie können sehen, dass das zugrunde liegende Drawable (progress_primary_holo_light.9.png) nicht wie erwartet skaliert. Der Grund dafür ist, dass der 9-Patch-Rand nur die oberen und unteren Pixel skaliert:

9-Patch

Der horizontale Bereich, der vom schwarzen Rand mit einem Pixel (grüne Pfeile) begrenzt wird, ist der Teil, der gedehnt wird, wenn Android die Größe des PNG vertikal ändern muss. Der Bereich zwischen den beiden roten Pfeilen wird nicht vertikal gestreckt.

Die beste Lösung, um dies zu beheben, besteht darin, die 9patch-PNGs zu ändern, um die Leiste und nicht den "Canvas-Bereich" zu dehnen, und dann eine benutzerdefinierte Fortschrittsbalken-XML zu erstellen, um diese 9patches zu verwenden. Ähnlich hier beschrieben: https://stackoverflow.com/a/18832349

Hier ist meine Implementierung für eine nicht unbestimmte Holo.Light ProgressBar. Sie müssen Ihre eigenen 9-Patches für unbestimmte und Holo ProgressBars hinzufügen. Idealerweise hätte ich den Leinwandbereich komplett entfernen sollen. Stattdessen habe ich es verlassen, aber den "Balken" -Bereich dehnbar gemacht. https://github.com/tir38/ScalingHoloProgressBar

tir38
quelle
9
<ProgressBar  
android:minHeight="20dip" 
android:maxHeight="20dip"/>
Android-Entwickler
quelle
2
Das funktioniert nicht! Die Antwort von Piraba ist einfach zu implementieren und funktioniert wie ein Zauber.
Thpitsch
Nein, dies steuert nicht die Höhe eines horizontalen Fortschrittsbalkens.
IgorGanapolsky
9

Viele Lösungen hier mit vielen positiven Stimmen haben bei mir nicht funktioniert, selbst die akzeptierte Antwort. Ich habe es durch Einstellen der SkalaY gelöst, aber es ist keine gute Lösung, wenn Sie zu viel Höhe benötigen, da das Zeichenelement pixelig ist.

Programmatisch:


progressBar.setScaleY(2f);

XML-Layout:


android:scaleY="2"
IgniteCoders
quelle
4

values-> styles.xml

<style name="tallerBarStyle" parent="@android:style/Widget.SeekBar">
    <item name="android:indeterminateOnly">false</item>
    <item name="android:progressDrawable">@android:drawable/progress_horizontal</item>
    <item name="android:indeterminateDrawable">@android:drawable/progress_horizontal</item>
    <item name="android:minHeight">8dip</item>
    <item name="android:maxHeight">20dip</item>
</style>

Fügen Sie dann in Ihrer ProgressBar Folgendes hinzu:

style="@style/tallerBarStyle"
Talha
quelle
Gute Antwort, aber auch vollständiger.
Emmanuel
Hat keinen Einfluss auf den horizontalen Fortschrittsbalken.
IgorGanapolsky
3

Dies ist der Fortschrittsbalken, den ich verwendet habe.

<ProgressBar
     android:padding="@dimen/dimen_5"
     android:layout_below="@+id/txt_chklist_progress"
     android:id="@+id/pb_media_progress"
     style="@style/MyProgressBar"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:layout_gravity="center"
     android:progress="70"
     android:scaleY="5"
     android:max="100"
     android:progressBackgroundTint="@color/white"
     android:progressTint="@color/green_above_avg" />

Und das ist mein Style-Tag

 <style name="MyProgressBar" parent="@style/Widget.AppCompat.ProgressBar.Horizontal">
    <item name="android:progressBackgroundTint">@color/white</item>
    <item name="android:progressTint">@color/green_above_avg</item>
</style>
Syeda
quelle
1

Sie können das ProgressIndicatorvon der Material Components Library bereitgestellte und das app:indicatorSizeAttribut verwenden:

<com.google.android.material.progressindicator.ProgressIndicator
    style="@style/Widget.MaterialComponents.ProgressIndicator.Linear.Indeterminate"
    app:indicatorSize="xxdp"
    ../>

Mit 12dp:

Geben Sie hier die Bildbeschreibung ein

Mit 4dp:

Geben Sie hier die Bildbeschreibung ein

Hinweis: Es ist mindestens die Version erforderlich 1.3.0-alpha03.

Gabriele Mariotti
quelle
0

Sie können den Stil des Fortschrittsbalkens wie folgt festlegen:

style="@android:style/Widget.ProgressBar.Horizontal"    
Rania
quelle