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?


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


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

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


20

Benutze das

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


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


9
<ProgressBar  
android:minHeight="20dip" 
android:maxHeight="20dip"/>

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"

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"

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>

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.


0

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

style="@android:style/Widget.ProgressBar.Horizontal"    
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.