Domyślnie ProgressBar ma pewne dopełnienie powyżej i poniżej samego paska. Czy jest sposób na usunięcie tej wyściółki, aby na końcu pozostała tylko sztanga?
android
android-progressbar
abergmeier
źródło
źródło
maxHeight
nie działa.android:minHeight="4dp"
Odpowiedzi:
Używam następującego rozwiązania jako obejścia tego problemu.
źródło
android:layout_marginTop="-6dp"
pracował dla mnie. Zastanawiasz się, czy to zależy od urządzenia? Testowałem tylko na Xperii Z1Framelayout
(jak w tej odpowiedzi jest lepszym rozwiązaniem i nie zależy od rozmiaru telefonu / typu / wersji systemuOto jak wykorzystałem odpowiedź Juozasa:
wysokość mojego
ProgressBar
to 4dp. Utworzyłem więc aFrameLayout
o wysokości 4dp i ustawiłemlayout_gravity
ofProgressBar
nacenter
. Działa jak urok.źródło
Skończyło się na użyciu biblioteki niestandardowej, aby rozwiązać ten problem. Większość innych rozwiązań działa, ale wyniki nie są spójne na różnych urządzeniach.
Aby dodać jako zależność gradle:
Aby dodać ProgressBar bez wewnętrznego dopełnienia do układu:
app:mpb_useIntrinsicPadding="false"
Zrób sztuczkę. Aby uzyskać więcej informacji, zobacz stronę GitHub .źródło
Jeśli ktoś nadal potrzebuje pomocy, może spróbować:
Tutaj pasek postępu znajduje się wewnątrz ConstraintLayout , a atrybuty constraintTop_toTopOf i constraintBottom_toTopOf muszą zostać zastosowane do tego samego elementu (w tym przypadku jest to wytyczna).
*** KOMPLETNE ROZWIĄZANIE: ***
źródło
Możliwe jest narysowanie wyśrodkowanego w pionie paska ProgressBar wewnątrz elementu nadrzędnego, który spowodowałby obcięcie wypełnienia. Ponieważ ProgressBar nie może narysować siebie większego niż element nadrzędny, musimy utworzyć dużego rodzica, aby umieścić go w widoku wycinania.
źródło
Aby usunąć pionowe wypełnienie
ProgressBar
, możesz to zrobić za pomocąProgressBar
Przykład zawiera 1 wrap_content
ProgressBar
, 1 8dpProgressBar
1 100dpProgressBar
źródło
Pełne rozwiązanie tego problemu byłoby następujące. Na wszelki wypadek, gdyby ktoś potrzebował fragmentów kodu, tak właśnie zrobiłem.
Oto progress_indeterminate_horizontal_holo.xml
Zasoby stylów skopiowane do mojego lokalnego pliku stylów.
I na koniec ustaw minimalną wysokość na 4 dp w moim lokalnym pliku układu.
źródło
<your-sdk-folder>/platforms/android-17/data/res/drawable-hdpi/
Napotkałem ten sam problem podczas korzystania z progressbar w stylu poziomym.
Podstawową przyczyną jest to, że domyślny pasek postępu z 9 łatkami do rysowania: (progress_bg_holo_dark.9.png) ma kilka pionowych przezroczystych pikseli jako wypełnienie.
Ostateczne rozwiązanie, które zadziałało dla mnie: dostosuj postęp do rysowania, mój przykładowy kod w następujący sposób:
custom_horizontal_progressbar_drawable.xml
fragment układu:
źródło
Jedna sztuczka polega na dodaniu ujemnych marginesów do paska postępu.
Poniżej znajduje się przykład kodu XML, zakładając, że znajduje się on na górze ekranu:
źródło
Odpowiedź Subina wydaje się być jedyną (obecnie), która nie jest delikatnym hackiem, który może zepsuć się w przyszłych wersjach Androida ProgressBar.
Ale zamiast kłopotać się wyłamywaniem zasobów, modyfikowaniem ich i utrzymywaniem ich w nieskończoność, zdecydowałem się użyć biblioteki MaterialProgressBar , która robi to za nas:
W build.gradle:
Ten projekt ma fajne demo, które pokazuje różnice między nim a wbudowanym ProgressBar.
źródło
jeśli ktoś wciąż szuka rozwiązania - sprawdź ten komentarz
ustaw minimalną wysokość na 4 dp
-
źródło
Używam minHeight i maxHeigh. Pomaga w różnych wersjach API.
Musi używać obu. Api 23 działa dobrze z platformami
Ale niższe wersje interfejsu API zwiększają wysokość paska postępu do maxHeight w tym przypadku.
źródło
Spróbuj wykonać następujące czynności:
... a następnie skonfiguruj pasek postępu do swoich potrzeb, ponieważ początkowo będzie wyświetlał średni pasek z żółtym odcieniem postępu z szarawym odcieniem postępu. Zwróć też uwagę, że nie ma dopełnienia pionowego.
źródło
Użyj w ten sposób, wewnątrz Linearlayout
źródło
dodanie android: progressDrawable do listy warstw zdefiniowanej w drawable rozwiązało problem. Działa poprzez maskowanie paska postępu w niestandardowym rysunku
przykładowa implementacja opisana na https://stackoverflow.com/a/4454450/1145905
źródło
Używam
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
i dość łatwo było pozbyć się marginesów. Ten styl to:Właśnie przekroczyłem minimalną / maksymalną wysokość:
źródło
Nie trzeba pobierać żadnego nowego modułu ani nawet umieszczać układu FrameLayout na pasku postępu. To wszystko to tylko hacki. Tylko 2 kroki:
W pliku what.xml
progress_horizontal.xml, Zmień wartości według własnego uznania.
Nie lubisz zaokrąglonych rogów?
Usuń promień narożnika
Nie lubisz kolorów? Zmień kolory itp. Gotowe!
Ogólnie rzecz biorąc, są to kroki, aby zmienić kod czegoś, czego nie lubisz. Po prostu znajdź kod źródłowy i dowiedz się, co zmienić. Jeśli zastosujesz się do kodu źródłowego ProgressBar, znajdziesz plik o nazwie progress_horizontal.xml, do którego się on odnosi. Zasadniczo, jak rozwiązuję wszystkie moje problemy z XML.
źródło
źródło
źródło
Po prostu skorzystaj z Material ProgressIndicator, który nie ma ukrytego marginesu.
źródło
Proste rozwiązanie bez sztuczek, które jest kompatybilne z każdą wersją Androida i nie wymaga zewnętrznych bibliotek, udaje
ProgressBar
z dwoma wViews
środkuLinearLayout
. Na tym skończyłem. Wygląda całkiem schludnie, a to podejście jest dość elastyczne - możesz animować go w zabawny sposób, dodawać tekst itp.Układ:
Kod:
Wynik (po dodaniu pewnej wysokości):
źródło
Najlepszym rozwiązaniem powinno być
Brak obejścia i działa jak urok.
źródło
minHeight
wstępnie zdefiniowane, które jest większe niż 0 (powiedzmy, że może 32dp). Zmieniając tę właściwość, uzyskasz inny wygląd.