单击按钮启动微调器

时间:2017-10-04 12:13:52

标签: xamarin.android

我正在研究Xamarin android。我想要一个微调器出现在按钮上,或者微调器应该在按钮上,我可以说另一种方式。听起来很疯狂,但那是几天前我脑子里的东西!是的,我见过Spinner。可能是我要求的不是计划的一部分,但我想实现它!

  

更新2:让我用一个例子来解释。

     

考虑Web 2.0 scientific calculator。有一个button π。你长按按钮,你会得到一个下拉。您从下拉列表中选择的常量将显示在textbox中。我想要与微调器相同的功能。差别在于我想要点击按钮而不是长按。希望我现在很清楚。

这是我尝试过的代码的一部分:

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

无论我使用Button还是ImageButton,都无关紧要!我很高兴其中任何一个。基本上我只想要一个下拉菜单弹出,只要我点击该按钮。谁能帮我这个?提前谢谢。

更新:当我处理York Shen's answer时,我得到了微调器占用的空白区域:like this

2 个答案:

答案 0 :(得分:1)

  

我想要一个微调器出现在按钮上。

您可以使用ButtonSpinner上加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>

然后,每次点击Button时,您都可以使用spinner.PerformClick()方法显示Spinner

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

Effect

更新:

我无法重现您的问题,但这是document的完整代码,您可以使用它并再试一次:

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();
}

答案 1 :(得分:0)

在您的XAML中,将微调器设置为不可见。在onClick事件中,设置更改可见性。如果你想让线性布局中微调器下方的东西移开,你可能需要在onClick上做更多的事情。