web-dev-qa-db-fra.com

Recherche discrète dans l'application Android?

Je souhaite créer une barre de recherche pour une application Android qui permette à l'utilisateur de sélectionner une valeur comprise entre -5 et 5 (correspondant à "fortement en désaccord" et "fortement en accord"). Comment créer une barre de recherche avec des valeurs discrètes? ou y a-t-il un meilleur widget d'interface utilisateur que je pourrais utiliser pour cela?

Merci.

26
vee

La Seekbar fonctionne très bien pour les valeurs discrètes. Nous utilisons une barre Seekbar pour les données discrètes, comme indiqué ci-dessous. Pour montrer quel élément est sélectionné, il suffit de changer la police de la vue de texte sélectionnée pour qu'elle soit plus grande. Vous pouvez également mettre en évidence en changeant la couleur de fond ou quelque chose. Ça marche plutôt bien. Vous voudrez appeler setMax (11) sur la barre de recherche, puis dans votre code, vous devrez effectuer une traduction appropriée entre les plages (0 à 11) et (-5 à 5). 

 <LinearLayout 
           Android:orientation="vertical"
           Android:layout_width="fill_parent"
           Android:layout_height="wrap_content"
           Android:gravity="center_horizontal">
     <LinearLayout 
           Android:orientation="horizontal"
           Android:layout_width="fill_parent"
           Android:layout_height="wrap_content"
           Android:gravity="center_horizontal">
    <TextView Android:text="-5"
            Android:id="@+id/answerNegative5"
            Android:textSize="25sp"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content" />
    <TextView Android:text="-4"
            Android:id="@+id/answerNegative4"
            Android:textSize="25sp"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content" />
    <TextView Android:text="-3"
            Android:id="@+id/answerNegative3"
            Android:textSize="25sp"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content" />
    .....
  </LinearLayout>

  <SeekBar Android:id="@+id/intensitySlider"
                    Android:layout_weight="0"
                    Android:layout_width="fill_parent"
                    Android:layout_height="wrap_content" />
</LinearLayout>
21
Jay Askren

Vérifiez ce lien Si vous souhaitez implémenter une barre de recherche discrète avec le nombre de vides sans utiliser de bibliothèque tierce, utilisez la propriété de style de seekbar. 

<SeekBar
     Android:id="@+id/sb"
     Android:layout_width="match_parent"
     Android:layout_height="wrap_content"
     Android:max="10"
     Android:thumb="@drawable/ic_location"
     Android:theme="@style/Widget.AppCompat.SeekBar.Discrete" />

 enter image description here

14
Prashant Jajal

Je ne sais pas quel est le problème ici, vous ajoutez une barre de recherche ayant une plage de 0 à 10. Vous pouvez ensuite mapper ces valeurs sur -5 si vous soustrayez -5 de la valeur sélectionnée.

MODIFIER

ajoutez Android:max="10" à la définition xml et vous obtenez une barre de recherche de taille fixe.

Vous devriez peut-être envisager d'ajouter une vue texte pour indiquer la représentation textuelle de la valeur sélectionnée actuelle, telle que: Fortement en désaccord. Pour mettre à jour cette vue, abonnez-vous à l'événement onProgressChanged et au paramètre progress vous donnera le nombre choisi.

SeekBar s = (SeekBar) findViewById(R.id.SeekBar);
s.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

                    @Override
                    public void onProgressChanged(SeekBar seekBar,
                            int progress, boolean fromUser) {
                                    }
}
7
Pentium10

J'espère que ce code vous aidera sûrement. [._____.]Essaye ça...

 float discrete = 0;
 float start = 0;
 float end = 100;
 float start_pos = 0;
 int start_position = 0;


 @Override
 public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);


     start = -10; //you need to give starting value of SeekBar 
     end = 10; //you need to give end value of SeekBar 
     start_pos = 5; //you need to give starting position value of SeekBar 

     start_position = (int)(((start_pos - start) / (end - start)) * 100);
     discrete = start_pos;
     SeekBar seek = (SeekBar) findViewById(R.id.seekBar1);
     seek.setProgress(start_position);
     seek.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {


         @Override
         public void onStopTrackingTouch(SeekBar seekBar) {
             // TODO Auto-generated method stub 
             Toast.makeText(getBaseContext(), "discrete = " + String.valueOf(discrete), Toast.LENGTH_SHORT).show();
         }


         @Override
         public void onStartTrackingTouch(SeekBar seekBar) {
             // TODO Auto-generated method stub 

         }


         @Override
         public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
             // TODO Auto-generated method stub 
             // To convert it as discrete value 
             float temp = progress;
             float dis = end - start;
             discrete = (start + ((temp / 100) * dis));

         }
     });
 }
1
Balaji Gunasekar

1ère étape: définissez maxVal sur 10;

2ème étape:

@Override
public void onProgressChanged(SeekBar seekBar, int progress,
        boolean fromUser) 
   {
    switch(seekBar.getId())
    {
    case R.id.mySeekBar:
        int prValue = progress - 5;
        editText.setText(String.valueOf(preValue));
        break;
    }
}
0
Mickey Tin
      <SeekBar
                Android:id="@+id/seekbar"
                style="@style/SeekBarWithoutSteps"
                Android:layout_width="match_parent"
                Android:layout_height="wrap_content"
                Android:layout_marginLeft="22dp"
                Android:layout_marginRight="22dp"
                Android:layout_marginTop="@dimen/margin_10"
                Android:max="4"
                Android:maxHeight="@dimen/margin_5"
                Android:minHeight="@dimen/margin_5"
                Android:paddingLeft="@dimen/margin_10"
                Android:paddingRight="@dimen/margin_10"
                Android:progressBackgroundTint="@color/colorGray"
                Android:progressTint="@color/colorGreen"
                Android:theme="@style/Widget.AppCompat.SeekBar.Discrete"
                Android:thumb="@drawable/filled_green"
                Android:thumbOffset="15dp" />
0
Pratibha Sarode