web-dev-qa-db-fra.com

comment résoudre les problèmes de recherche de barre de barre, de pouce et de centrage

J'ai défini l'image du pouce d'une barre de recherche, mais mon pouce semble peu en dessous de la barre de recherche. Comment placer le pouce à la bonne position d'une barre de recherche. Jetez un oeil sur l'image ci-jointeenter image description here

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

Merci Sunil Kumar Saoo

41
user831722

Définissez minHeight et maxHeight comme la hauteur de la barre de recherche. par exemple

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

Voir l'url suivante http://qtcstation.com/2011/05/Android-how-to-fix-seekbar-bar-thumb-centering-issues/

65
Sunil Kumar Sahoo

En fait, il suffit de définir maxHeight à un grand nombre comme 1000dp.

Cela présente également l'avantage de travailler avec height=wrap_content et height=match_parent.

22
peter.bartos

Pour moi, le problème est plus lié au centrage vertical de l'arrière-plan (piste dessinable). C'est le code drawable imparfait que j'ai utilisé à l'origine (qui a généré le problème), comme suggéré par Android et autres entrées 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>

Le problème ici est le premier élément, qui se rapporte à l'arrière-plan du SeekBar. De nombreuses entrées vous indiqueront de définir la fonction layout_minHeight sur une valeur élevée pour éviter une déconnexion spatiale verticale entre le pouce et sa piste. Ce n'était pas la solution pour moi - vu sur une tablette, l'arrière-plan dessinait toujours à sa plus petite taille basée sur le téléphone - donc la piste était toujours positionnée bien au-dessus du centre de la piste SeekBar. La solution consiste à supprimer cette entrée dans le dessin de SeekBar, elle ressemble donc à ceci:

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

Ensuite, dans la définition de style de SeekBar, définissez le layout_background sur le tracé de la piste. Le mien ressemble à ceci:

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

(Auparavant, le paramètre d'arrière-plan n'était qu'une couleur [blanc].).

Voici l'entrée de ma mise en page, qui utilise à la fois le style et les dessinables:

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

Donc, pour résumer, ne définissez pas la fonction d'arrière-plan (piste) dans votre dessin SeekBar personnalisé, définissez-la dans la fonction layout_background de votre style SeekBar personnalisé. Cela garantit que la piste est toujours centrée verticalement dans une barre de recherche horizontale.

5
Epsilon3

J'ai simplement résolu le pouce de la barre de recherche horizontale mal alignée en définissant layout_height de la barre de recherche pour wrap_content au lieu de match_parent

1
Damian v d berg