如何创建Android Spinner作为弹出窗口?

Edw*_*ans 59 android dialog spinner

当用户点击菜单项以允许用户选择项目时,我想调出微调器对话框.

我是否需要单独的对话框,还是可以直接使用Spinner?我看到这个链接,提到了一个MODE_DIALOG选项,但它似乎不再被定义了.AlertDialog可能没问题,但所有选项都说"单击列表中的项目不会忽略对话框"这就是我想要的.有什么建议吗?

理想情况下,代码类似于在屏幕上显示微调器的情况:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(activity,
     android.R.layout.simple_spinner_item, items);              
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
myspinner.setAdapter(adapter);  
// myspinner.showAsDialog() <-- what i want             
Run Code Online (Sandbox Code Playgroud)

Nat*_*ann 111

您可以使用警报对话框

    AlertDialog.Builder b = new Builder(this);
    b.setTitle("Example");
    String[] types = {"By Zip", "By Category"};
    b.setItems(types, new OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {

            dialog.dismiss();
            switch(which){
            case 0:
                onZipRequested();
                break;
            case 1:
                onCategoryRequested();
                break;
            }
        }

    });

    b.show();
Run Code Online (Sandbox Code Playgroud)

当按下其中一个按钮时,这将关闭对话框,就像你想要的那样.希望这可以帮助!

  • 使用`setSingleChoiceItems()`而是有一个int参数来表示首先选择要设置的项. (4认同)
  • 啊没关系,它引用了一个不同的OnClickListener.不得不使用`new DialogInterface.OnclickListener ...`. (3认同)

小智 87

xml中有选项

android:spinnerMode="dialog"
Run Code Online (Sandbox Code Playgroud)

用于对话模式


hao*_*ang 18

试试这个:

Spinner popupSpinner = new Spinner(context, Spinner.MODE_DIALOG);
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅此链接.


ada*_*amp 11

MODE_DIALOG和MODE_DROPDOWN在API 11(Honeycomb)中定义.MODE_DIALOG描述了以前平台版本中的常见行为.


San*_*San 9

添加一个小属性,android:spinnerMode="dialog"以便在弹出窗口中显示微调器内容.


Ale*_*dam 6

您可以创建自己的自定义对话框.这很容易.如果要通过微调器中的选择将其关闭,则添加OnItemClickListener并添加

int n = mSpinner.getSelectedItemPosition();
mReadyListener.ready(n);
SpinnerDialog.this.dismiss();
Run Code Online (Sandbox Code Playgroud)

就像在OK按钮的OnClickListener中一样.但是,有一点需要注意,如果重新选择默认选项,则onclick侦听器不会触发.你也需要OK按钮.

从布局开始:

res/layout/spinner_dialog.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="wrap_content" 
  android:layout_height="wrap_content">
<TextView 
    android:id="@+id/dialog_label" 
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent"
    android:hint="Please select an option" 
    />
<Spinner
    android:id="@+id/dialog_spinner" 
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent"
    />
<Button
    android:id="@+id/dialogOK" 
    android:layout_width="120dp"
    android:layout_height="wrap_content" 
    android:text="OK"
    android:layout_below="@id/dialog_spinner"
    />
<Button
    android:id="@+id/dialogCancel" 
    android:layout_width="120dp"
    android:layout_height="wrap_content" 
    android:text="Cancel"
    android:layout_below="@id/dialog_spinner"
    android:layout_toRightOf="@id/dialogOK"
    />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

然后,创建类:

src/your/package/SpinnerDialog.java:

public class SpinnerDialog extends Dialog {
    private ArrayList<String> mList;
    private Context mContext;
    private Spinner mSpinner;

   public interface DialogListener {
        public void ready(int n);
        public void cancelled();
    }

    private DialogListener mReadyListener;

    public SpinnerDialog(Context context, ArrayList<String> list, DialogListener readyListener) {
        super(context);
        mReadyListener = readyListener;
        mContext = context;
        mList = new ArrayList<String>();
        mList = list;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.spinner_dialog);
        mSpinner = (Spinner) findViewById (R.id.dialog_spinner);
        ArrayAdapter<String> adapter = new ArrayAdapter<String> (mContext, android.R.layout.simple_spinner_dropdown_item, mList);
        mSpinner.setAdapter(adapter);

        Button buttonOK = (Button) findViewById(R.id.dialogOK);
        Button buttonCancel = (Button) findViewById(R.id.dialogCancel);
        buttonOK.setOnClickListener(new android.view.View.OnClickListener(){
            public void onClick(View v) {
                int n = mSpinner.getSelectedItemPosition();
                mReadyListener.ready(n);
                SpinnerDialog.this.dismiss();
            }
        });
        buttonCancel.setOnClickListener(new android.view.View.OnClickListener(){
            public void onClick(View v) {
                mReadyListener.cancelled();
                SpinnerDialog.this.dismiss();
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

最后,将其用作:

mSpinnerDialog = new SpinnerDialog(this, mTimers, new SpinnerDialog.DialogListener() {
  public void cancelled() {
    // do your code here
  }
  public void ready(int n) {
    // do your code here
  }
});
Run Code Online (Sandbox Code Playgroud)