가로 ProgressBar에서 세로 여백 제거


127

기본적으로 ProgressBar에는 막대 자체의 위와 아래에 특정 패딩이 있습니다. 이 패딩을 제거하여 끝에 막대 만 갖도록하는 방법이 있습니까?


7
다른 항목에서 언급했듯이 설정 maxHeight은 작동하지 않습니다.
abergmeier 2013 년

android:minHeight="4dp"
Sam Chen

답변:


71

이 문제에 대한 해결 방법으로 다음을 사용합니다.

android:layout_marginBottom="-8dp"
android:layout_marginTop="-4dp"

1
layout_marginBottom이 필요하지 않았습니다.
AlikElzin-kilaka 2014

11
android:layout_marginTop="-6dp"나를 위해 일했습니다. 기기에 의존하는지 궁금하십니까? 난 단지 엑스 페리아 Z1에 테스트 한
Thorbjørn 카펠 한센

2
@ ThorbjørnKappelHansen 장치에 따라 다릅니다. Galaxy S6 및 여백 상단 -6dp가 원하는대로 작동하지 않습니다.
Muhammad Abdul-Rahim

1
여백은 진행률 표시 줄과 Android 버전의 크기에 따라 달라집니다.
Noel

2
사용 Framelayout에서처럼 ( 이 대답하는 것은 더 나은 솔루션이며 전화 크기 / 종류 / OS 버전에 의존하지
koceeng

57

이것이 내가 Juozas의 대답을 사용한 방법입니다.

내 높이는 ProgressBar4dp입니다. 그래서 나는 FrameLayout높이가 4dp 인을 만들고 layout_gravityof ProgressBarcenter. 매력처럼 작동합니다.

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

23
이것은 좋은 생각이지만 지원 라이브러리 진행률 표시 줄을 사용하여 Android 7.0에서 코드가 작동하지 않았습니다. 바가 얇아졌지만 여전히 상단에 패딩이 있습니다.
Sam

4
@Sam 그냥 ProgressBar (예 : 높이 = 100dp)를 만드십시오. FrameLayout으로 인해 여전히 4dp로 유지되지만 막대가 두껍게 보입니다.
Megaetron 2018

5
API 24 이상에서는 작동하지 않습니다. 바는 우리가 설정 한 크기에 관계없이 얇아집니다.
Mauker

36

이 문제를 해결하기 위해 사용자 지정 라이브러리를 사용하게되었습니다. 대부분의 다른 솔루션은 작동하지만 결과는 다양한 장치에서 일관되지 않습니다.

MaterialProgressBar

  • Android 4.0 이상에서 일관된 모양.
  • 플랫폼 전반에 걸친 올바른 색조.
  • 프레임 워크 ProgressBar의 내부 패딩을 제거 할 수 있습니다.
  • 프레임 워크 수평 ProgressBar의 트랙을 숨길 수 있습니다.
  • 프레임 워크 ProgressBar의 드롭 인 대체물로 사용됩니다.

gradle 종속성으로 추가하려면 :

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

기본 패딩이없는 ProgressBar를 레이아웃에 추가하려면 :

<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"트릭을 수행합니다. 자세한 내용은 GitHub 페이지를 참조하십시오 .


먼저 패딩을 제거하기 위해 다른 종속성을 추가하지 않으려 고했습니다. 그러나 다른 모든 솔루션은 하나 또는 다른 방법 / 버전에서 실패했으며 결국 작동하는 데 3 분 정도 걸렸습니다 !! 감사합니다.
ToniTornado

32
뷰의 패딩을 수정하기위한 전체 라이브러리입니다. Google로 이동합니다.
Denny

위의 경우 @ style / Widget.AppCompat.ProgressBar.Horizontal을 사용할 수 있습니다 (설정에 따라 다름)
ror

32

누군가 여전히 도움이 필요한 경우 다음을 시도 할 수 있습니다.

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

여기서 진행률 표시 줄은 ConstraintLayout 내부에 있으며 constraintTop_toTopOfconstraintBottom_toTopOf 속성은 동일한 요소에 적용되어야합니다 (이 경우 가이드 라인).

*** 완전한 솔루션 : ***

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

5
완벽하게 작동하므로 정답으로 표시되어야합니다!
Philio

1
이것이 정답입니다! 모든 기기 (마진이 제공되지 않음) 및 Android 버전 (프레임 레이아웃 솔루션에서 제공되지 않음)과 호환됩니다. 또한 시스템 드로어 블을 앱으로 가져 오는 데 필요한 모든 작업을 수행 할 필요가 없습니다 (시스템 전체에서 모든 Android 버전에 일관된 UI를 제공하지 않음).
Vaios

2
@Ali_Waris 답변을 게시 해 주셔서 감사합니다.이 솔루션이 작동하지 않는 것으로 이해하고 싶습니다. ConstraintLayout 및 답변에 대한 지침을 포함하도록 답변을 확장 할 수 있습니까?
scottyab

여기서 가이드 라인은 무엇입니까? 어디로 갈까요?
iamgopal

guidline 대신 빈보기 <View app : layout_constraintStart_toStartOf = "parent"app : layout_constraintEnd_toEndOf = "parent"android : id = "@ + id / guideline"android : layout_width = "0dp"android : layout_height = "0dp"android를 사용할 수 있습니다. : orientation = "vertical"android : visibility = "invisible"app : layout_constraintBottom_toBottomOf = "parent"/>
Kochchy

16

패딩을 잘라내는 부모 내부에 세로로 가운데에있는 ProgressBar를 그릴 수 있습니다. ProgressBar는 부모보다 더 크게 그릴 수 없기 때문에 클리핑 뷰 안에 배치 할 큰 부모를 만들어야합니다.

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

1
이것은 Android 7.0에서 작동했지만 Android 4.1.2를 실행하는 Sony Xperia M에서 진행률 표시 줄이 나타나지 않았습니다.
Sam

@Sam보고 해 주셔서 감사합니다! 첫 번째 FrameLayout의 높이를 4dp에서 48dp로 변경하면 어떻게 되나요?
Juozas Kontvainis

진행률 표시 줄이 나타나지만 그 아래에 많은 패딩이 있고 그 위에 약간의 패딩이 있습니다.
Sam

@Sam 내 대답을 업데이트했습니다. Sony 장치에서 정상적으로 작동하기를 바랍니다. 도움이되지 않으면 애플리케이션 테마 구성을 검토하는 것이 좋습니다. KitKat에서 Holo 테마를 사용하면 문제가 해결됩니다.
Juozas Kontvainis

15

의 수직 패딩을 제거하려면 ProgressBar다음을 수행하십시오.

  • 높이를 정하다 ProgressBar
  • scaleY = "value"(값 = 높이 / 4) 사용 (4는 진행률 표시 줄의 기본 높이)

예제에 1 개의 wrap_content ProgressBar, 1 8dp ProgressBar, 1 100dp 포함ProgressBar

여기에 이미지 설명 입력

<ProgressBar
    style="?android:attr/progressBarStyleHorizontal"
    ...
    android:layout_height="8dp"
    android:scaleY="2" />

14

이 문제에 대한 완전한 해결책은 다음과 같습니다. 누군가 코드 조각이 필요한 경우를 대비하여 이것이 내가 한 일입니다.

  1. 8 개의 불확실한 수평 진행률 표시 줄 드로어 블을 모두 복사했습니다.
  2. 이미지 조작기를 사용하여 드로어 블을 편집하고 불필요한 패딩을 제거했습니다.
  3. Android 플랫폼에서 progress_indeterminate_horizontal_holo.xml이라는 드로어 블 XML을 복사했습니다.
  4. Widget.ProgressBar.Horizontal 스타일과 그 부모를 복사했습니다.
  5. 레이아웃에서 수동으로 스타일 및 min_height 설정

다음은 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" />

스타일 리소스가 내 로컬 스타일 파일에 복사되었습니다.

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

마지막으로 로컬 레이아웃 파일에서 최소 높이를 4dp로 설정합니다.

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

1 단계에서 언급 한 드로어 블을 어디에서 복사 할 수 있습니까? "1. 8 개의 불확실한 수평 진행률 표시 줄 드로어 블을 모두 복사했습니다."
Greenhand

3
@JeffreyLin 나는이 위치에서 복사<your-sdk-folder>/platforms/android-17/data/res/drawable-hdpi/
수빈 세바스찬에게

33
Android에서 기본적으로 제공되어야하는 상식적인 행동을 달성하기 위해 얼마나 많은 작업을해야하는지 놀랍지 않습니까?
SpaceMonkey

1
그리고 머티리얼 디자인을 위해?
mrroboaat

@aat 재료 지침에 유사한 진행률 표시 줄이 있다고 생각하지 않습니다. 이 문서를 통해 이동하십시오 google.com/design/spec/components/...
수빈 세바스찬

10

수평 스타일로 진행률 표시 줄을 사용하는 동안 동일한 문제가 발생했습니다.

근본 원인은 진행률 표시 줄에 대한 기본 9 패치 드로어 블 (progress_bg_holo_dark.9.png)에 패딩으로 일부 수직 투명 픽셀이 있다는 것입니다.

나를 위해 일한 최종 솔루션 : 다음과 같이 진행률 드로어 블, 샘플 코드를 사용자 정의하십시오.

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>

레이아웃 스 니펫 :

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

이것이 아마도 최상의 솔루션 일 것입니다. 귀하의 예제 코드는 Android 4.1.2를 실행하는 Sony Xperia M에서 진행률 표시 줄을 생성하지 않았습니다.
Sam

8

한 가지 트릭은 진행률 표시 줄에 마이너스 여백을 추가하는 것입니다.

다음은 화면 상단에 있다고 가정 한 XML 코드의 예입니다.

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

코드 결과


마이너스 마진을 추가하면 문제가 해결되었습니다. 감사!
icarovirtual

5

Subin의 답변은 Android ProgressBar의 향후 릴리스에서 손상 될 수있는 취약한 해킹이 아닌 유일한 (현재) 것으로 보입니다.

그러나 리소스를 분리하고 수정하고 무기한 유지하는 문제를 겪는 대신 MaterialProgressBar 라이브러리 를 사용하기로 결정했습니다 .

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

build.gradle에서 :

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

이 프로젝트에는 내장 된 ProgressBar와의 차이점을 보여주는 멋진 데모 가 있습니다.


4

누군가가 여전히 해결책을 찾고 있다면-이 의견을 확인하십시오.

최소 높이를 4dp로 설정

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

이 대답을 선호합니다.
Sam Chen

2

minHeight와 maxHeigh를 사용합니다. 다양한 API 버전에 도움이됩니다.

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

둘 다 사용해야합니다. Api 23은

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

그러나 낮은 Api 버전은이 경우 진행률 표시 줄 높이를 maxHeight로 증가시킵니다.


2

다음을 시도하십시오.

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

... 그런 다음 회색 진행 배경 색조와 함께 노란색 진행 색조로 중간 크기의 막대를 처음에 표시하므로 필요에 따라 진행률 표시 줄을 구성합니다. 또한 세로 여백이 없습니다.


2

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>

잘 작동합니다! 다음 번에는 코드가 수행하는 작업과 변경 한 사항을 설명하십시오. ;-)
개발자 Jokela

1

드로어 블에 정의 된 레이어 목록에 android : progressDrawable을 추가하면 문제가 해결되었습니다. 사용자 정의 드로어 블에서 진행 막대를 마스킹하여 작동합니다.

https://stackoverflow.com/a/4454450/1145905에 설명 된 구현 예


1

나는 사용 style="@style/Widget.AppCompat.ProgressBar.Horizontal"하고 있으며 여백을 제거하는 것이 상당히 쉬웠습니다. 그 스타일은 다음과 같습니다.

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

최소 / 최대 높이를 무시했습니다.

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

나는 일반 진행률 표시 줄이 만족스러운없고, 결국 라이브러리로 전환 된 적이 : me.zhanghai.android.materialprogressbar.MaterialProgressBar
안토니

1

새 모듈을 다운로드하거나 진행률 표시 줄 주위에 FrameLayout을 배치 할 필요가 없습니다. 이것들은 모두 해킹입니다. 단 2 단계 :

당신의 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, 원하는대로 값을 변경하십시오.

둥근 모서리가 마음에 들지 않습니까?
모서리 반경 제거

색상이 마음에 들지 않습니까? 색상 등을 변경합니다. 완료!

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

일반적으로 다음은 당신이 좋아하지 않는 코드를 변경하는 단계입니다. 소스 코드를 찾아서 무엇을 변경해야하는지 알아보십시오. ProgressBar 소스 코드를 따르면 참조하는 progress_horizontal.xml이라는 파일을 찾을 수 있습니다. 기본적으로 모든 XML 문제를 해결하는 방법입니다.


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

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

단순히 코드를 게시하지 마십시오. 답변에 대한 컨텍스트를 제공하십시오.
Martin Gal

0

숨겨진 여백이없는 Material ProgressIndicator를 사용하십시오.

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

-1

안드로이드의 모든 버전과 호환되며 외부 라이브러리를 필요로하지 않는 간단한 노 트릭 솔루션은 날조되어 ProgressBar두 사람과 함께 Views내부 LinearLayout. 이것이 내가 끝낸 것입니다. 매우 깔끔해 보이며이 접근 방식은 매우 유연합니다. 펑키 한 방식으로 애니메이션을 적용하고 텍스트를 추가 할 수 있습니다.

나열한 것:

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

암호:

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

}

결과 (일부 고도가 추가됨) :

여기에 이미지 설명 입력


-1

최선의 해결책은

android:minHeight="0dp"

해결 방법이 없으며 매력처럼 작동합니다.


작동하지 않았습니다. 왜 작동해야하는지 설명해 주시겠습니까?
humble_wolf

@humble_wolf 제가 답을 썼을 때 이전 프로젝트에서 저 자신을 위해 일했습니다. 특정 버전의 라이브러리에 의존 할 수 있습니까? 진행률 표시 줄에 패딩과 같은 패딩이있는 이유는 실제 패딩이 아니지만 minHeight미리 정의 된 0보다 큰 (예 : 32dp) 패딩이 있기 때문에 작동해야합니다 . 이 속성을 변경하면 다른 모습을 얻을 수 있습니다.
Alex Fan

Inderminate = true 모드에서 나를 위해 일하지 않았거나 결정 모드에서 일할 수 있습니다. 이것이 정말로 답이되기를 원한다면 모든 조건과 함께 답으로 설명을 작성하십시오.
humble_wolf
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.