태그 보관물: android-progressbar

android-progressbar

가로 ProgressBar에서 세로 여백 제거 아래에 특정

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



답변

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

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


답변

이것이 내가 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>


답변

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

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 페이지를 참조하십시오 .


답변

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

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


답변

패딩을 잘라내는 부모 내부에 세로로 가운데에있는 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>


답변

의 수직 패딩을 제거하려면 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" />


답변

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

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