2013-08-30 8 views
27

Sto provando a mettere una barra di avanzamento orizzontale nella parte superiore della cornice. Ma sembra che ci sia un padding che semplicemente non sono stato in grado di rimuovere. Qualsiasi aiuto?Allineare ProgressBar orizzontale in alto (rimuovi gap)

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> 

risposta

32

La risposta di Pork'n'Bunny ha funzionato all'API 16 e ai dispositivi. Questa soluzione ha funzionato su tutti i dispositivi. Basta spingerlo di 6dp in 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

Quanto è robusto questo rispetto alle modifiche negli stili di default? Sono garantiti per guardare e lavorare allo stesso modo per tutta l'eternità o potrebbero teoricamente sostituirli in qualsiasi momento con qualcosa in cui spingerlo verso l'alto di 6 pixel creerebbe problemi (ad esempio una barra di avanzamento invisibile)? – Joey

+6

Questo non funziona su tutti i dispositivi. Su Galaxy S6, anche con un margine superiore '-6dp', lo spazio bianco sopra la barra di avanzamento è ancora visibile. –

4

dagli sguardi di esso, penso che la sua causata da l'immagine utilizzata nello styling di default

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

(l'immagine a cui mi riferisco è questo: @android:drawable/progress_indeterminate_horizontal_holo e @android:drawable/progress_horizontal_holo_dark)

Queste immagini hanno molto sfondo di tela; quindi mostra questo gap.

La mia raccomandazione:

utilizzare un'immagine personalizzata per stile che PregressBar. Uno che non ha molta spaziatura della tela.

enter image description here

+2

Questa è in definitiva la risposta giusta.Dovrò modificare una versione di tutti gli holo drawable (9 patch) per sbarazzarmi del padding. –

-1

Credo che il problema è con l'attributo di altezza. prova ad impostare l'altezza del layout su un valore

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

Questo non funziona. –

+0

Se questo è il caso, allora si dovrebbe cambiare le drawable a quelli personalizzati nei vostri stili presentare Raghuram

3

Una soluzione completa a questo problema sarebbe la seguente. Nel caso in cui qualcuno avesse bisogno di frammenti di codice, questo è quello che ho fatto.

  1. copiato tutti i 8 indeterminati drawable progressbar orizzontali
  2. modificato il drawable utilizzando alcune manipolatore dell'immagine, eliminando inutili imbottiture
  3. copiato il drawable XML denominato progress_indeterminate_horizontal_holo.xml dalla piattaforma Android
  4. copiato lo stile Widget. ProgressBar.Horizontal e i suoi genitori
  5. Impostare manualmente lo stile e il min_height nel layout

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

risorse stile copiati al mio file stili locali.

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

Infine, impostare l'altezza minima su 4 dpi nel file di layout locale.

<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

Grazie Subin! Non ho ancora deciso di farlo ancora perché non ero sicuro di quanto oltre a modificare l'unico drawable ci vorrebbero fare, ora lo sappiamo tutti. Grazie per la condivisione. –

+0

La domanda riguarda '? Android: attr/progressBarStyleHorizontal' e non' @ style/Widget.ProgressBar.Horizontal' –

1

avvicinò con un'altra soluzione poiché il drawable funziona come previsto nell'immagine. Basta spingerlo di 6pp in su.

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

Funziona solo a livello di API 16 e versioni successive. C'è un modo per correggere API 8 e versioni successive? – bCliks

Problemi correlati