Hapus padding vertikal dari ProgressBar horizontal

127

Secara default ProgressBar memiliki padding tertentu di atas dan di bawah bar itu sendiri. Apakah ada cara untuk menghapus bantalan ini sehingga hanya memiliki bilah pada akhirnya?

abergmeier.dll
sumber
7
Seperti disebutkan dalam topik lain, pengaturan maxHeight, tidak berfungsi.
abergmeier
android:minHeight="4dp"
Sam Chen

Jawaban:

72

Saya menggunakan berikut ini sebagai solusi untuk masalah ini.

android:layout_marginBottom="-8dp"
android:layout_marginTop="-4dp"
Stephen Wan
sumber
1
Saya tidak membutuhkan layout_marginBottom.
AlikElzin-kilaka
11
android:layout_marginTop="-6dp"bekerja untuk saya. Bertanya-tanya apakah itu tergantung pada perangkat? Saya hanya menguji Xperia Z1
Thorbjørn Kappel Hansen
2
@ ThorbjørnKappelHansen Tergantung perangkat. Galaxy S6 dan margin atas -6dp tidak berfungsi seperti yang diinginkan.
Muhammad Abdul-Rahim
1
Saya pikir marginnya akan bergantung pada ukuran bilah kemajuan dan versi android.
Noel
2
menggunakan Framelayout(seperti dalam jawaban ini adalah solusi yang lebih baik dan tidak tergantung pada ukuran / jenis ponsel / versi os
koceeng
57

Beginilah cara saya menggunakan jawaban Juozas:

ketinggian saya ProgressBaradalah 4dp. Jadi saya membuat FrameLayoutdengan tinggi 4dp dan mengatur layout_gravitydari ProgressBarke center. Ini bekerja seperti pesona.

<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
sumber
23
Ini ide yang bagus, tetapi kode Anda tidak berfungsi untuk saya di Android 7.0 menggunakan bilah kemajuan pustaka dukungan. Bilahnya menjadi lebih tipis tetapi masih memiliki bantalan di bagian atas.
Sam
4
@ Sam Buat saja ProgressBar misalnya tinggi = 100dp. Karena FrameLayout masih tetap 4dp tetapi bilahnya terlihat lebih tebal.
Megaetron
5
Jangan bekerja di API 24+. Bilah menjadi semakin tipis tidak peduli ukuran yang kita atur di atasnya.
Mauker
36

Saya akhirnya menggunakan perpustakaan khusus untuk menyelesaikan masalah ini. Sebagian besar solusi lain berfungsi tetapi hasilnya tidak konsisten di berbagai perangkat.

MaterialProgressBar

  • Penampilan yang konsisten di Android 4.0+.
  • Memperbaiki tinting di seluruh platform.
  • Mampu menghapus bantalan intrinsik kerangka ProgressBar.
  • Mampu menyembunyikan jejak kerangka ProgressBar horizontal.
  • Digunakan sebagai pengganti drop-in untuk kerangka ProgressBar.

Untuk menambahkan sebagai ketergantungan gradle:

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

Untuk menambahkan ProgressBar tanpa padding intrinsik ke tata letak Anda:

<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"melakukan triknya. Untuk lebih jelasnya lihat halaman GitHub .

Binoy Babu
sumber
Pertama saya mencoba menghindari untuk menambahkan ketergantungan lain hanya untuk menghapus beberapa padding. Tetapi semua solusi lain gagal dalam satu atau lain cara / versi dan pada akhirnya ini seperti 3 menit untuk membuatnya bekerja !! Terima kasih.
ToniTornado
32
Seluruh perpustakaan hanya untuk memperbaiki padding pada tampilan. Bagus untuk Google.
Denny
Anda mungkin ingin menggunakan @ gaya / Widget.AppCompat.ProgressBar.Horizontal untuk di atas (tergantung pada setup Anda)
RoR
32

Jika seseorang masih membutuhkan bantuan dapat mencoba ini:

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

Di sini, progress bar adalah dalam ConstraintLayout , dan constraintTop_toTopOf dan constraintBottom_toTopOf atribut harus diterapkan untuk unsur yang sama (dalam hal ini, itu adalah pedoman).

*** SOLUSI LENGKAP: ***

<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>
Ali_Waris
sumber
5
Ini harus ditandai sebagai jawaban yang benar karena berfungsi dengan sempurna!
Philio
1
Ini adalah jawaban yang benar! Anda kompatibel dengan semua perangkat (yang tidak diberikan margin negatif) dan versi android (yang tidak disediakan oleh solusi tata letak bingkai). Anda juga tidak perlu melakukan semua pekerjaan yang diperlukan dengan mengimpor sistem drawable ke aplikasi (yang tidak menyediakan UI yang konsisten di seluruh sistem ke semua versi android).
Vaios
2
@Ali_Waris terima kasih telah mengirimkan jawaban, saya ingin memahami solusi ini karena tidak dapat membuatnya berfungsi. Bisakah Anda memperluas jawaban untuk menyertakan ConstraintLayout dan pedoman ke jawabannya?
scottyab
Apa pedoman di sini? Kemana perginya?
iamgopal
alih-alih pedoman, Anda dapat menggunakan tampilan kosong <View app: layout_constraintStart_toStartOf = "parent" app: layout_constraintEnd_toEndOf = "parent" android: id = "@ + id / guideline" android: layout_width = "0dp" android: layout_height = "0dp" android : orientasi = "vertical" android: visibility = "invisible" app: layout_constraintBottom_toBottomOf = "parent" />
Kochchy
16

Dimungkinkan untuk menggambar ProgressBar yang berpusat secara vertikal di dalam induk yang akan memotong padding. Karena ProgressBar tidak dapat menggambar dirinya lebih besar dari induk, kita harus membuat induk besar untuk ditempatkan di dalam tampilan kliping.

<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
sumber
1
Ini berfungsi pada Android 7.0, tetapi tidak menghasilkan bilah kemajuan pada Sony Xperia M saya yang menjalankan Android 4.1.2.
Sam
@Sam terima kasih telah melaporkan! Apa yang Anda lihat jika Anda mengubah ketinggian FrameLayout pertama dari 4dp menjadi 48dp?
Juozas Kontvainis
Bilah kemajuan muncul, tetapi ada banyak bantalan di bawahnya dan sedikit bantalan di atasnya.
Sam
@Sam Saya telah memperbarui jawaban saya, semoga ini berfungsi dengan baik di perangkat Sony Anda. Jika tidak membantu, saya sarankan untuk meninjau konfigurasi tema aplikasi Anda. Menggunakan tema Holo di KitKat harus memperbaikinya.
Juozas Kontvainis
15

Untuk menghilangkan vertial padding ProgressBardapat dilakukan dengan cara

  • perbaiki ketinggian ProgressBar
  • Gunakan scaleY = "value" (nilai = tinggi / 4) (4 adalah tinggi default progress bar)

Contoh berisi 1 wrap_content ProgressBar, 1 8dp ProgressBar, 1 100dpProgressBar

masukkan deskripsi gambar di sini

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

Solusi lengkap untuk masalah ini adalah sebagai berikut. Untuk berjaga-jaga jika seseorang membutuhkan fragmen kode, inilah yang saya lakukan.

  1. Menyalin semua 8 drawable progresif horizontal tak tentu
  2. Mengedit drawable menggunakan beberapa manipulator gambar dan menghapus padding yang tidak perlu
  3. Menyalin XML drawable bernama progress_indeterminate_horizontal_holo.xml dari platform android
  4. Menyalin gaya Widget.ProgressBar.Horizontal dan induknya
  5. Atur gaya dan min_height secara manual dalam tata letak

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

Sumber daya gaya disalin ke file gaya lokal saya.

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

Dan terakhir, setel tinggi min menjadi 4dp di file tata letak lokal saya.

<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
sumber
Dari mana kita dapat menyalin drawable yang disebutkan di langkah 1: "1. Menyalin semua 8 drawable progresif horizontal yang tidak dapat ditentukan"?
Greenhand
3
@JeffreyLin Saya menyalinnya dari lokasi ini<your-sdk-folder>/platforms/android-17/data/res/drawable-hdpi/
Subin Sebastian
33
Bukankah menakjubkan betapa banyak pekerjaan yang harus Anda lakukan untuk mencapai perilaku akal sehat yang seharusnya menjadi default di Android?
SpaceMonkey
1
Dan untuk desain material?
mrroboaat
@aat ini menurut saya pedoman materi tidak memiliki bilah kemajuan yang serupa. Silakan lihat dokumen ini: google.com/design/spec/components/…
Subin Sebastian
10

Saya menemui masalah yang sama saat menggunakan progressbar dengan gaya Horizontal.

Akar penyebabnya adalah 9-patch drawable default untuk progress bar: (progress_bg_holo_dark.9.png) memiliki beberapa piksel transparan vertikal sebagai padding.

Solusi terakhir yang berhasil untuk saya: sesuaikan kemajuan drawable, kode sampel saya sebagai berikut:

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>

cuplikan tata letak:

<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"/>
emosifxxk
sumber
Ini mungkin solusi terbaik. Kode contoh Anda tidak menghasilkan bilah kemajuan pada Sony Xperia M saya yang menjalankan Android 4.1.2.
Sam
8

Salah satu triknya adalah menambahkan margin negatif ke bilah kemajuan Anda.

Di bawah ini adalah contoh kode XML, dengan asumsi itu ada di atas layar Anda:

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

hasil kode

chinmay.d
sumber
Menambahkan margin negatif memecahkan masalah bagi saya. Terima kasih!
icarovirtual
5

Jawaban Subin tampaknya menjadi satu-satunya (saat ini) yang bukan merupakan subjek peretasan rapuh yang akan rusak dalam rilis Android ProgressBar di masa mendatang.

Tetapi daripada mengalami kesulitan memecah sumber daya, memodifikasinya, dan mempertahankannya tanpa batas, saya memilih untuk menggunakan pustaka MaterialProgressBar , yang melakukannya untuk kita:

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

Dalam build.gradle:

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

Proyek itu memiliki demo bagus yang menunjukkan perbedaan antara itu dan ProgressBar bawaan.

Stephen Talley
sumber
4

jika seseorang masih mencari solusi - periksa komentar ini

atur tinggi minimum menjadi 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" />
ahmed ewess
sumber
Saya lebih suka jawaban ini.
Sam Chen
2

Saya menggunakan minHeight dan maxHeigh. Ini membantu untuk versi Api yang berbeda.

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

Ini perlu menggunakan keduanya. Api 23 bekerja dengan baik

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

Tetapi versi Api yang lebih rendah meningkatkan tinggi bilah kemajuan ke maxHeight dalam kasus itu.

Andrii Volynets
sumber
2

Coba yang berikut ini:

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

... lalu konfigurasikan bilah kemajuan sesuai kebutuhan Anda karena pada awalnya akan menampilkan bilah berukuran sedang dengan warna kemajuan berwarna kuning dengan warna latar belakang kemajuan keabu-abuan. Juga, perhatikan bahwa tidak ada bantalan vertikal.

DaveNOTDavid
sumber
2

Gunakan seperti ini, di dalam 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.dll
sumber
Bekerja dengan baik! Lain kali jelaskan apa yang Anda lakukan kode dan perubahan apa yang Anda lakukan. ;-)
Pengembang Dari Jokela
1

menambahkan android: progressDrawable ke daftar lapisan yang ditentukan di drawable memperbaiki masalah saya. Ia bekerja dengan menutupi bilah proses dalam drawable khusus

contoh implementasi dijelaskan di https://stackoverflow.com/a/4454450/1145905

kip2
sumber
1

Saya menggunakan style="@style/Widget.AppCompat.ProgressBar.Horizontal"dan cukup mudah untuk menghilangkan margin. Gaya itu adalah:

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

Saya baru saja mengesampingkan tinggi min / maks:

    <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
sumber
Saya tidak pernah puas dengan bilah kemajuan generik dan pada akhirnya beralih ke perpustakaan: me.zhanghai.android.materialprogressbar.MaterialProgressBar
Anthony
1

Tidak perlu mengunduh modul baru atau bahkan meletakkan FrameLayout di sekitar Progress Bar. Ini semua hanyalah retasan. Hanya 2 langkah:

Di apapun.xml Anda

<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, Ubah nilainya sesuka Anda.

Tidak suka sudut membulat?
Hapus radius sudut

Tidak suka warnanya? Ubah warna, dll. Selesai!

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

Umumnya, ini adalah langkah-langkah untuk mengubah kode apa pun yang tidak Anda sukai. Temukan saja kode sumbernya dan cari tahu apa yang harus diubah. Jika Anda mengikuti kode sumber ProgressBar, Anda akan menemukan file bernama progress_horizontal.xml yang direferensikan. Pada dasarnya bagaimana saya menyelesaikan semua masalah XML saya.

Daniel Kim
sumber
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
sumber
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
sumber
Harap jangan hanya memposting kode. Berikan konteks pada jawaban Anda.
Martin Gal
0

Gunakan saja Material ProgressIndicator yang tidak memiliki margin tersembunyi.

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

Solusi tanpa trik sederhana yang kompatibel dengan versi Android apa pun dan tidak memerlukan pustaka eksternal adalah memalsukan ProgressBardua Viewsdi dalamnya LinearLayout. Inilah yang akhirnya saya dapatkan. Terlihat cukup rapi dan pendekatan ini cukup fleksibel - Anda dapat menganimasikannya dengan cara yang funky, menambahkan teks, dll.

Tata Letak:

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

Kode:

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

}

Hasil (dengan beberapa ketinggian ditambahkan):

masukkan deskripsi gambar di sini

Janeks Bergs
sumber
-1

Solusi terbaik seharusnya

android:minHeight="0dp"

Tidak ada solusi dan berfungsi seperti pesona.

Alex Fan
sumber
tidak berhasil, dapatkah Anda menjelaskan mengapa ini harus berhasil?
humble_wolf
@humble_wolf Itu bekerja untuk diri saya sendiri di proyek saya sebelumnya ketika saya menulis jawabannya; mungkin bergantung pada beberapa versi perpustakaan tertentu? Ini harus berfungsi karena alasan ada padding seperti hal untuk progress bar bukanlah padding yang sebenarnya tetapi ada minHeightyang lebih besar dari 0 (katakanlah 32dp mungkin) yang telah ditentukan sebelumnya. Dengan mengubah properti ini, Anda mendapatkan tampilan yang berbeda.
Alex Fan
Tidak bekerja untuk saya dalam mode Inderminate = true, mungkin bekerja dalam mode determinate. Jika Anda benar-benar ingin ini menjadi jawaban, silakan tulis penjelasannya di jawaban dengan semua ketentuan.
humble_wolf