2011-09-13 6 views
34

Ho impostato l'immagine del pollice di una barra di ricerca, ma il mio pollice sembra poco al di sotto della barra di ricerca. Come impostare il pollice nella posizione corretta di una barra di ricerca. Dai un'occhiata a l'immagine allegata enter image description herecome risolvere seekbar-bar-thumb-centering-issues

<SeekBar android:id="@+id/PP_Player_SeekBar" 
     android:thumb="@drawable/music_player_playerhead" 
     android:paddingLeft="8dip" 
     android:paddingRight="8dip"     
     android:progressDrawable="@drawable/seekbar_drawable_xml_background" 
     android:layout_width="236dip" 
     android:layout_centerHorizontal="true" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="47dip"></SeekBar> 

Grazie Sunil Kumar Saoo

+0

Penso che il problema sia con l'immagine stessa "music_player_playerhead". Quindi controlla la lima del pollice se il cerchio nel mezzo. –

risposta

59

Set MinHeight e maxHeight uguale all'altezza di SeekBar. ad esempio

<SeekBar 
    android:id="@+id/PP_Player_SeekBar" 
    android:thumb="@drawable/music_player_playerhead" 
    android:paddingLeft="8dip" 
    android:paddingRight="8dip"     
    android:progressDrawable="@drawable/seekbar_drawable_xml_background" 
    android:layout_width="236dip" 
    android:layout_centerHorizontal="true" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="47dip" 
    android:minHeight="11dip" 
    android:maxHeight="11dip" /> 

il seguente URL http://qtcstation.com/2011/05/android-how-to-fix-seekbar-bar-thumb-centering-issues/

+0

E se, sto usando il peso del layout, come in questo caso, l'altezza sarebbe 0dp :) – NarendraJi

+0

Cosa spiega perché questo dovrebbe funzionare? Questo non fa niente per me. Il mio allineamento va bene su API 21 e su Ho solo questo problema su API meno recenti. La mia ipotesi è che il pollice sia allineato correttamente ma è lo sfondo che non lo è. – Jensie

19

In realtà, è sufficiente definire maxHeight ad un grande numero come 1000dp.

Questo ha anche il vantaggio di lavorare con height=wrap_content e height=match_parent.

+0

Questo è quello che ho finito per fare. Definire un SeekBar di base nel layout XML con maxHeight 1000dp. Quindi posso impostare tutto a livello di programmazione e il pollice appare nel punto morto e tutto il resto è buono. Grazie! –

+0

Grazie!Quello è ciò di cui ho bisogno!! – Manza

+1

Veloce e al punto. Questa dovrebbe essere la risposta selezionata! Questo ha anche il vantaggio di lavorare con height = wrap_content e height = match_parent – Andy

3

Per me il problema è più correlato al centraggio verticale dello sfondo (tracciabile). Questo è il codice drawable imperfetto che ho usato in origine (che ha generato il problema), come suggerito dallo sviluppatore Android e altre voci StackOverflow:

<item 
    android:id="@android:id/background" 
    android:drawable="@drawable/seekbar_track"/> 
<item android:id="@android:id/secondaryProgress"> 
    <scale 
     android:drawable="@drawable/seekbar_progress2" 
     android:scaleWidth="100%" /> 
</item> 
<item android:id="@android:id/progress"> 
    <scale 
     android:drawable="@drawable/seekbar_progress" 
     android:scaleWidth="100%" /> 
</item> 

Il problema qui è la prima voce, che si riferisce allo sfondo della SeekBar. Molte voci ti diranno di impostare la funzione layout_minHeight su un valore elevato per evitare una disconnessione spaziale verticale tra il pollice e la sua traccia. Questa non era la soluzione per me: se visualizzata su un tablet, lo sfondo stava ancora disegnando sulla sua dimensione più piccola basata sul telefono, quindi la traccia era sistematicamente posizionata ben al di sopra del centro della traccia SeekBar. La soluzione è quella di rimuovere questa voce nel drawable SeekBar, in modo che ora assomiglia a questo:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 

    <item android:id="@android:id/secondaryProgress"> 
     <scale 
      android:drawable="@drawable/seekbar_progress2" 
      android:scaleWidth="100%" /> 
    </item> 
    <item android:id="@android:id/progress"> 
     <scale 
      android:drawable="@drawable/seekbar_progress" 
      android:scaleWidth="100%" /> 
    </item> 

</layer-list> 

Poi, nella definizione di stile del SeekBar, impostare il layout_background al drawable pista. Il mio è il seguente:

<style name="styleSeekBar" parent="@android:style/Widget.SeekBar"> 
    <item name="android:padding">@dimen/base_0dp</item> 
    <item name="android:background">@drawable/seekbar_track</item> 
    <item name="android:progressDrawable">@drawable/abratingbar</item> 
    <item name="android:minHeight">@dimen/base_29dp</item> 
    <item name="android:maxHeight">@dimen/base_29dp</item> 
    <item name="android:layout_marginLeft">@dimen/base_10dp</item> 
    <item name="android:layout_marginRight">@dimen/base_10dp</item> 
    <item name="android:layout_marginTop">@dimen/base_10dp</item> 
    <item name="android:layout_marginBottom">@dimen/base_10dp</item> 
    <item name="android:scaleType">fitXY</item> 
</style> 

(in precedenza, l'impostazione dello sfondo era solo un colore [bianco].).

Questa è la voce nel mio layout, che utilizza sia lo stile e le drawable:

<SeekBar 
    android:id="@+id/seekbar_page_number" 
    style="@style/styleSeekBar" 
    android:layout_width="match_parent" 
    android:layout_height="@dimen/base_29dp" 
    android:minHeight="@dimen/base_29dp" 
    android:maxHeight="@dimen/base_29dp" 
    android:layout_marginLeft="@dimen/base_230dp" 
    android:layout_gravity="bottom|right" 
    android:progress="1" 
    android:max="20" 
    android:progressDrawable="@drawable/abseekbar" 
    android:thumb="@drawable/abseekbar_thumb"/> 

Quindi, per riassumere, non impostare lo sfondo (traccia) funzione nel vostro SeekBar drawable personalizzato, impostarlo nella funzione layout_background del tuo stile SeekBar personalizzato. Ciò garantisce che la traccia sia sempre centrata verticalmente in una SeekBar orizzontale.

+0

Buona risposta! Prima cerca di capire se è il pollice o il progresso che non sono centrati. Questa soluzione è per quando il progresso non è centrato all'interno della barra di ricerca – Bugdr0id