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.
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>
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" />
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) {
}
}
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è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;
}
}
<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" />