可能以编程方式在Android应用程序中打开微调器?

如果您在Android activity拥有一个Spinner对象的句柄,您是否可以以编程方式popup打开微调器选项 – 从而强制用户select一个选项,即使它们本身没有单击spinner

要打开微调,你只需要调用它的performClick()方法。

请记住,您只能从UI线程中调用此方法。 如果你需要从一个单独的线程中打开Spinner,你应该在UI线程中创build一个Handler ,然后从第二个线程发送一个调用performClick()给Handler的可运行对象。

 package com.example.SpinnerDemo; import android.app.Activity; import android.os.Bundle; import android.widget.ArrayAdapter; import android.widget.Spinner; import android.os.Handler; public class SpinnerDemo extends Activity { private Handler h; private Spinner s; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); h = new Handler(); s = (Spinner) findViewById(R.id.spinner); ArrayAdapter adapter = ArrayAdapter.createFromResource(this, R.array.planets, android.R.layout.simple_spinner_item); adapter.setDropDownViewResource( android.R.layout.simple_spinner_dropdown_item); s.setAdapter(adapter); // Open the Spinner... s.performClick(); // Spawn a thread that triggers the Spinner to open after 5 seconds... new Thread(new Runnable() { public void run() { // DO NOT ATTEMPT TO DIRECTLY UPDATE THE UI HERE, IT WON'T WORK! // YOU MUST POST THE WORK TO THE UI THREAD'S HANDLER h.postDelayed(new Runnable() { public void run() { // Open the Spinner... s.performClick(); } }, 5000); } }).start(); } } 

这个例子使用的资源可以在这里find。

要显示微调项目,你只需要调用它的performClick()方法。

 Spinner spDeviceType = (Spinner) findViewById(R.id.spDeviceType); spDeviceType.performClick(); 

为什么在前面的例子中有两个可运行的?

这不够用:

 h.postDelayed(new Runnable() { public void run() { s.performClick(); } }, 5000); 

只需yourspinner.performClick();