2013-08-30 7 views
27

Я пытаюсь установить горизонтальный индикатор выполнения в верхней части рамки. Но, кажется, есть дополнение, которое я просто не смог удалить. Любая помощь?Выровнять 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> 

ответ

32

Ответ 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" /> 
+16

Насколько это было бы опасно для изменений стилей по умолчанию? Гарантированы ли они, чтобы они выглядели и работали одинаково на всю вечность, или они теоретически могут заменить их в любое время чем-то, в результате чего нажатие на 6 пикселей создало бы проблемы (например, невидимый индикатор выполнения)? – Joey

+6

Это не работает на каждом устройстве. На Galaxy S6, даже с верхним краем '-6dp', белое пространство над индикатором выполнения все еще видно. –

4

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

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

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

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

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

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

enter image description here

+2

Это, в конечном счете, правильный ответ.Мне нужно будет отредактировать версию всех голографических (9 патчей), чтобы избавиться от прокладки. –

-1

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

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

Это не работает. –

+0

Если это так, то вы должны изменить к настраиваемым вводимому коэффициенту те, в ваших стилях файл <стиля = имя родитель «Widget.Holo.ProgressBar.Horizontal» = «Widget.ProgressBar.Horizontal»> <имя элемента = "андроид: progressDrawable"> Индивидуальный вытяжка <имя элемента = "андроид: indeterminateDrawable"> Индивидуальной вытяжка имени <пункта = "андроид: layout_height"> 16dip имя <пункта = "андроид: MaxHeight"> 16dip – Raghuram

3

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

  1. скопировано все 8 неопределенного горизонтальный ProgressBar
  2. вводимых коэффициент
  3. отредактирован с помощью вводимого коэффициента некоторых изображений манипулятором и удалить ненужные отступы
  4. Скопировал Drawable XML с именем progress_indeterminate_horizontal_holo.xml от андроида платформы
  5. скопированной стиль виджета. ProgressBar. Горизонтальные и его родители
  6. Установите стиль и 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" /> 
+0

Спасибо Субин! Я на самом деле не собирался делать это еще, потому что я не был уверен, насколько больше, чем редактирование, которое можно было бы сделать, теперь все мы знаем. Спасибо, что поделился. –

+0

Вопрос о '? Android: attr/progressBarStyleHorizontal', а не' @ style/Widget.ProgressBar.Horizontal' –

1

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

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

Он работает только с уровнем API 16 и выше. Есть ли способ исправить для API 8 и выше? – bCliks

Смежные вопросы