Question

J'ai un écran où l'utilisateur a de nombreux éléments à l'entrée si l'espace de l'écran est à une prime.

Je veux que le regard du widget sur l'écran (avant que l'utilisateur appuie il) être semblable à un EditText ou la partie gauche du widget Spinner (sans le triangle vers le bas normal) sur le côté droit du Tisseur. Ensuite, lorsque l'utilisateur appuie sur le widget, il / elle recevra la boîte de dialogue de sélection normal de Spinner.

Y at-il un attribut de style Spinner je peux changer pour y parvenir?

Je n'ai pas été en mesure de voir le code comme celui-ci.

Merci

Était-ce utile?

La solution

Une chose que vous pouvez faire est le code source de prendre Spinner de la base de code Android, ainsi que des mises en page et de ressources connexes, et les utiliser pour créer votre propre widget personnalisé (probablement vous ne devez supprimer la flèche de la mise en page et modifier la code un peu en fonction de vos besoins).

EDIT: Vous avez raison, après ce poste, il était en fait très simple :) Vous devez faire deux choses. Tout d'abord, créez un fichier styles.xml sous res / valeurs, ouvrir et ajouter ce qui suit:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style parent="@android:style/Widget.Spinner" name="SpinnerAsEditText">
        <item name="android:background">@android:drawable/edit_text</item>
    </style>
</resources>

Ensuite, dans votre mise en page, ajoutez le Spinner comme ceci:

<Spinner style="@style/SpinnerAsEditText" anyOtherAttributeYouNeed="..."></Spinner>

Voilà, maintenant la fileuse ressemblera à une EditText plaine, sans que vers le bas unuseful et ennuyeux flèche.

Autres conseils

Ceci est tout à fait une vieille question, mais je pense toujours d'actualité, alors voici ma réponse:

méthode la plus simple

lencinhaus réponse est correcte. Il fonctionne, mais il peut être fait d'une manière encore plus simple: Il suffit d'ajouter un autre fond dedans. L'exemple ci-dessous utilise le fond standard Button pour un plus homogène look and feel:

<Spinner
    android:id="@+id/my_spinner"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:prompt="@string/my_prompt" 
    android:background="@android:drawable/btn_default"
    />       

Le syle utilisé dans l'autre réponse ne plus appliquer un fond au widget. Cela peut se faire directement au widget, sauvant la nécessité d'un nouveau fichier xml. Bien sûr, si vous allez appliquer un style à la fileuse de toute façon, il n'y a rien de mal à cette approche.

Pourquoi?

La clé pour comprendre comment cela fonctionne réside dans la description des PNGs 9-patch . Les lignes à droite et en bas sont utilisés pour le remplissage, à savoir de conserver un espace d'être utilisé par son contenu. Dans ce cas, l'intérieur du texte. L'arrière-plan standard Spinner utilise une image avec une flèche à droite qui est en dehors de la zone de texte utilisable. Voir la figure 1 ci-dessous pour une illustration:

Figure 1. originale Spinner bacground 9-patch PNG http://tinypic.com/images/404 .gif
Figure 1. Spinner originale bacground PNG 9-patch.

Il suffit de retirer la flèche ne suffit pas car le rembourrage reste là. Vous devez utiliser une nouvelle image 9-patch avec une diminution de rembourrage (voir la figure 2 pour un exemple basé sur la figure. 1) ou l'utilisation d'une des précompilée 9 images patch sans tant rembourrage, tels que ceux pour EditText (< strong> @android:drawable/edit_text ) ou Button ( @android:drawable/btn_default ).


Figure 2. Modifié Spinner bacground PNG 9-patch avec un rembourrage réduite.

Comprendre cela vous permettra de créer vos propres fonds pour la Spinner (et, en fait, pour ne importe quel widget).

Une meilleure explication des fichiers 9-patch se trouve ici

Il est très facile de créer les fichiers avec draw9patch exécutable à partir du SDK ( lire ici ), mais rien ne vous empêche d'utiliser Photoshop ou Gimp à la place. Rappelez-vous, 9 PNGs-patch sont juste PNGs simples! La seule mise en garde est de vous assurer que vous dessinez seulement aux lignes extérieures de pixels et que le reste des pixels sont complètement transparents. anticrénelage près de la frontière pourrait donner des résultats inattendus.

Je viens d'arriver à cette question, parce que mon spinner ne montrait pas l'indicateur triangle, maintenant je comprends pourquoi: je mettais l'arrière-plan « blanc »:

android:background="#FFFFFFFF"

Cela supprime l'indicateur de triangle (l'image de fond de la centrifugeuse et le rembourrage indiqué par Aleadam).

Pour mon problème, je le résoudre en ajoutant une LinearLayout mère juste pour mettre l'arrière-plan « blanc ».

Donnez-lui un arrière-plan, la flèche disparaît.

android:background="@drawable/bg"

Je faisais la même question et a changé le style à:

style="@style/Widget.AppCompat.Light.DropDownItem.Spinner"

et cela a fonctionné.

Comment étrange, il se trouve dans DropDownItem.

Alors que celui qui a le triangle inférieur est nommé normal.

Vive!

Le problème connexe de l'espace pris lorsque vous cliquez en fait sur fileur, je l'ai trouvé par hasard que vous pouvez supprimer ces grands indicateurs de sélection à droite. Vous obtenez une liste de base séparés par des lignes, mais vous pouvez cliquer sur un élément et il fonctionne encore.

Mettre en place un spinner comme celui-ci pour obtenir les indicateurs de sélection:

    Spinner s1 = (Spinner) findViewById(R.id.spinner1);
    ArrayAdapter<CharSequence> adapter1 = ArrayAdapter.createFromResource(
            this, R.array.petals, android.R.layout.simple_spinner_item);
    adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    s1.setAdapter(adapter1);

Pour aucun indicateur il suffit de laisser la ligne de setDropDownViewResource.

pourquoi ne vous allez pas pour un dialogue avec la liste. Selon vos besoins, créer un champ edittext, ajoutez setOnFocusChangeListener puis afficher une boîte de dialogue avec les éléments de la liste dans la méthode onFocusChange (). Pour le dialogue avec les éléments de liste

new AlertDialog.Builder(this)
                .setTitle("<Title>")
                .setItems(R.array.<ItemsArrayName>, new DialogInterface.OnClickListener(){
     @Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub  
}}).show();

Pas de réponse m'a été utile pour moi, voici donc une solution en une ligne très simple qui fonctionne.

  //some spinner initialisation stuff->
mySpinner.setAdapter(adapter);

  //some spinner initialisation stuff->
mySpinner.getBackground().setColorFilter(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);

Je ne peux pas dire avec certitude si cela va fonctionner avec juste une mise en page de spinner par défaut, mais il a bien fonctionné avec mon habitude que j'ai créé pour d'autres besoins.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top