2017-10-04 3 views
0

Je travaille sur Xamarin android. Je veux qu'un fileur apparaisse sur un bouton ou que le fileur soit sur un bouton, de l'autre côté je peux dire. Ça a l'air fou mais c'est ce que j'ai eu dans la tête il y a quelques jours! Oui, j'ai vu Spinner. Peut-être que ce que je demande ne fait pas partie du plan, mais je veux l'implémenter!lancement spinner sur le clic d'un bouton

MISE À JOUR 2: Permettez-moi d'expliquer avec un exemple.

Considérons le Web 2.0 scientific calculator. Il y a un button π. Vous appuyez longuement sur le bouton et vous obtiendrez une liste déroulante. La constante que vous sélectionnez dans la liste déroulante sera affichée dans le textbox. Je veux la même fonctionnalité avec le spinner. Juste la différence est que je le veux sur le clic de bouton plutôt que d'un appui long. J'espère que je suis clair maintenant.

C'est la partie du code que j'ai essayé avec:

<!--main.axml--> 

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_gravity="center" 
    android:id="@+id/myTitle"> 

      <!--some stuff--> 

      <ImageButton android:onClick="onClick" 
      android:id="@+id/btnPi" 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight=".33" 
      android:padding="100dip" 
      android:src="@drawable/pi" /> 
     <Spinner 
      android:onClick="onClick" 
      android:id="@+id/btnConst" 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight=".33" 
      android:prompt="@string/cons" /> 

    <!--And few other stuffs--> 
</LinearLayout> 

<!--Strings.xml--> 

<string name="cons">const</string> 
    <string-array name="ConsArray"> 
    <item>Angstrom star</item> 
    <item>Faraday constant</item> 
    <item>Planck constant</item> 
    <item>Rydberg constant</item> 
    <item>Stefan-Boltzmann constant</item> 
    <item>electric constant</item> 
    <item>mag. constant</item> 
    <item>neutron mass</item> 
    </string-array> 

Peu importe ce pour moi si j'utilise un Button ou un ImageButton! Je suis heureux avec l'un ou l'autre. Fondamentalement, je veux juste un menu déroulant à popup, dès que je clique sur ce bouton. Est-ce que quelqu'un peut m'aider avec ça? Merci d'avance.

MISE À JOUR: Quand je travaillais sur York Shen's answer, je suis arrivé cet espace vide occupé par la fileuse: like this

Répondre

0

Dans votre XAML, réglez la fileuse de ne pas être visible. Dans votre événement onClick, définissez la visibilité. Il se peut que vous deviez en faire plus dans onClick si vous voulez que les éléments situés en dessous de la roue de la disposition linéaire disparaissent.

1

Je souhaite qu'un curseur apparaisse sur un bouton.

Vous pouvez mettre un Button sur Spinner en utilisant un FrameLayout:

<FrameLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <Spinner 
     android:id="@+id/spinner" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:prompt="@string/planet_prompt" 

    /> 
    <Button 
     android:id="@+id/bt_spinner" 
     android:text="Spinner Button" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
    /> 
</FrameLayout> 

Ensuite, chaque fois que votre Button est de cliquer, vous pouvez utiliser spinner.PerformClick() méthode pour montrer votre Spinner:

bt_spinner.Click += (sender, e) => 
{ 
    spinner.PerformClick(); 
}; 

Effect.

Mise à jour:

Je ne peux pas reproduis votre problème, mais voici mon code complet de la document, vous pouvez l'utiliser et essayez à nouveau:

spinner.ItemSelected += new EventHandler<AdapterView.ItemSelectedEventArgs>(spinner_ItemSelected); 
var adapter = ArrayAdapter.CreateFromResource(this, Resource.Array.planets_array, Android.Resource.Layout.SimpleSpinnerItem); 

adapter.SetDropDownViewResource(Android.Resource.Layout.SimpleSpinnerDropDownItem); 
spinner.Adapter = adapter; 
bt_spinner.Click += (sender, e) => 
{ 
    spinner.PerformClick(); 
}; 

... 

private void spinner_ItemSelected(object sender, AdapterView.ItemSelectedEventArgs e) 
{ 
    Spinner spinner = (Spinner)sender; 

    string toast = string.Format("The planet is {0}", spinner.GetItemAtPosition(e.Position)); 
    Toast.MakeText(this, toast, ToastLength.Long).Show(); 
} 
+0

yup, mais la fileuse occupe l'espace! Je vais mettre l'image dans le post. –

+0

@AshishSrivastava, j'ai mis à jour ma réponse, s'il vous plaît vérifier, et si cela ne peut pas résoudre votre problème, nous avons besoin de voir du code et de vous aider à identifier le problème. –

+0

Salut Shen! J'ai mis à jour ma question avec un exemple. J'espère que j'ai eu du sens cette fois. Merci de votre aide. –