Подтвердить что ты не робот

Выровнять ProgressBar горизонтально сверху (удалить зазор)

Я пытаюсь установить горизонтальный индикатор выполнения в верхней части рамки. Но, кажется, есть дополнение, которое я просто не смог удалить. Любая помощь?

enter image description here

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="match_parent"
          android:layout_height="match_parent">
<ProgressBar android:id="@+id/flv_progress_bar"
             android:layout_width="fill_parent"
             style="@android:style/Widget.Holo.ProgressBar.Horizontal"
             android:indeterminateOnly="true"
             android:layout_height="wrap_content"
             android:layout_gravity="top"/>
</FrameLayout>
4b9b3361

Ответ 1

Pork'n'Bunny отвечает на работу с API уровня 16 и выше. Это решение работало на всех устройствах. Просто нажмите его на 6dp в XML.

 <ProgressBar
        android:id="@+id/progressbar_Horizontal"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:max="100"
        android:layout_alignParentTop="true"
        android:layout_marginTop="-6dp" />

Ответ 2

по внешнему виду, я думаю, что это вызвано изображением, используемым при стилизации по умолчанию

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

(изображение, на которое я имею в виду, это следующее: @android:drawable/progress_indeterminate_horizontal_holo и @android:drawable/progress_horizontal_holo_dark)

У этих изображений много фона холста; поэтому он показывает этот пробел.

Моя рекомендация:

используйте собственный образ, чтобы создать стиль PregressBar. Тот, у которого нет большого расстояния между холстами.

enter image description here

Ответ 3

Полное решение этой проблемы было бы следующим. На всякий случай, если кому-то нужны фрагменты кода, это то, что я сделал.

  • Скопировано все 8 неопределенных горизонтальных индикаторов прогресса выполнения
  • Отредактируйте чертежи с помощью некоторого манипулятора изображения и удалите ненужные прокладки
  • Скопировал выталкиваемый XML с именем progress_indeterminate_horizontal_holo.xml с платформы Android.
  • Скопирован стиль Widget.ProgressBar.Horizontal и его родители.
  • Установите стиль и 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" />

Ответ 4

Придумал другое решение, так как drawable работает как на скриншоте. Просто нажмите его на 6dp вверх.

    mProgress = (ProgressBar) view.findViewById(R.id.fwv_progress);
    mProgress.animate().withLayer().yBy(-6.0f*getResources().getDisplayMetrics().density).setDuration(0).start();

Ответ 5

Я думаю, что проблема связана с атрибутом height. попробуйте установить высоту макета на некоторое значение

<ProgressBar
            android:id="@+id/progressBar"
            android:max="100"
            android:layout_width="match_parent"
            android:layout_height="2dp"
            style="@android:style/Widget.ProgressBar.Horizontal"
            />