如何在 android 中创建自定义 Spinner 工具栏下拉菜单

How create a custom Spinner toolbar dropdown in android

我需要在我的操作中添加自定义微调器下拉菜单 bar.In main-activity 我正在使用以下代码。

    private Toolbar mToolbar;
    private Spinner mToolbarSpinner;
    private List<SpinnerNavItem> mToolbarSpinnerNavigationItems;
    private BaseAdapter mArrayAdapter;

    mToolbar = (Toolbar) findViewById(R.id.toolbar_actionbar);
    setSupportActionBar(mToolbar);
    getSupportActionBar().setDisplayShowHomeEnabled(true);
    getSupportActionBar().setDisplayShowTitleEnabled(false);

       /*Setup a Spinner*/
    mToolbarSpinner = (Spinner) findViewById(R.id.spinner_toolbar);
    /*Manage the spinner*/
    mToolbarSpinnerNavigationItems = new ArrayList<SpinnerNavItem>();

    mToolbarSpinnerNavigationItems.add(new SpinnerNavItem("Local", R.drawable.deviceonline,"device namne1","port",false));
    mToolbarSpinnerNavigationItems.add(new SpinnerNavItem("My Places", R.drawable.deviceonline,"device name2","port2",false));

    mArrayAdapter = new ArrayAdapter(this, R.layout.support_simple_spinner_dropdown_item,
            mToolbarSpinnerNavigationItems);

    mToolbarSpinner.setAdapter(mArrayAdapter);

当我运行项目时,我得到以下输出

我该如何解决这个问题?

有 2 个选项供您选择:

  • 首先,您可以将 class SpinnerNavItem 的方法 toString() 重写为 return 您想要显示的内容。

  • 其次,您可以覆盖 ArrayAdapter 的方法 getView()getDropDownView() 以准确显示您想要的内容。

    • getView()Spinner 上显示当前所选项目的文本(Spinner 的当前显示文本)
    • getDropDownView()显示Spinner

      弹出下拉列表中每一项的文字
      mArrayAdapter = new ArrayAdapter(this, R.layout.support_simple_spinner_dropdown_item,
      mToolbarSpinnerNavigationItems) {
          @Override
          public View getView(int position, View convertView, ViewGroup parent) {
              SpinnerNavItem currentItem = mToolbarSpinnerNavigationItems.get(position);
              // remember to inflate custom layout for spinner item
              // then set anything you want here
              // remember to use convertView.findViewById(), not just findViewById()
      
              // this is an example
              // inflate layout
              convertView = View.inflate(MainActivity.this, R.layout.support_simple_spinner_dropdown_item, null);
              // get view
              TextView tvText1 = (TextView) convertView.findViewById(android.R.id.text1);
              // set content
              tvText1.setText("Text to display");
              // return
              return convertView;
          }
      
          @Override
          public View getDropDownView(int position, View convertView, ViewGroup parent) {
              // implement the same way as getView() method
          }
      
      };