【问题标题】:Spinner in action bar with only icon but not the selected option操作栏中的微调器只有图标但没有选定的选项
【发布时间】:2013-04-24 05:26:21
【问题描述】:

我正在开发一个带有用于导航的操作栏的应用程序。现在我正在尝试将Spinner 添加到ActionBar

我可以在ActionBar 上获得我的自定义图标。但是当我将条目添加到微调器中时,图标隐藏在选择框后面,并选择了第一个项目。

我只想让ActionBardrop-down-list/spinner 中的图标在点击图标时出现。

这是我的代码:

private void initializeMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.options, menu);

    View v = (View) menu.findItem(R.id.menuSort).getActionView();
    Spinner spinner=(Spinner)v.findViewById(R.id.bookmarks_menu);

    Bookmark bookmark1 = new Bookmark();
    Bookmark bookmark2 = new Bookmark();

    List<Bookmark> list = new ArrayList<Bookmark>();
    list.add(bookmark1);
    list.add(bookmark2);

    SpinAdapter adapter = new SpinAdapter(getApplicationContext(),0, list);
    spinner.setAdapter(adapter); 
}

【问题讨论】:

标签: android android-actionbar spinner


【解决方案1】:

仅图标Spinner 可通过几个步骤实现。

第 1 步

把你想要的图标放到xml里:

<Spinner
    ...
    android:background="@drawable/ic_sort_white_24dp" />

第 2 步

然后,在Spinneradapter 中,覆盖getView(),如下所示:

ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list){
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // this part is needed for hiding the original view
            View view = super.getView(position, convertView, parent);
            view.setVisibility(View.GONE);

            return view;
        }
};

说明

我们需要了解适配器中的getView() 是在Spinner 没有打开时将使用的视图。我们将可见性设置为gone,因为我们不想看到它,所以剩下的就是xml中Spinner的背景,在这个例子中我已经设置为ic_sort_white_24dp(步骤1)。

不要与getDropDownView() 混淆,getDropDownView() 用于在单击Spinner 后将下拉的选项行。

额外截图!

这就是我的样子。希望对您有所帮助!

【讨论】:

    【解决方案2】:

    在您的适配器中,您需要覆盖 getDropDownView()。这应该提供微调器行中使用的视图。 getView() 然后应该为您的图标返回一个 ImageView。

    有关更多详细信息和示例,请参阅以下 2 个类似问题的答案:

    【讨论】:

      【解决方案3】:

      检查它的工作..

      public class MainActivity extends Activity {
      
          final String[] choices = { "Android", "iOS", "RIM" };
          final int[] choices_img = { R.drawable.ic_launcher, R.drawable.ios,
                  R.drawable.black };
      
          @SuppressLint("NewApi")
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
      
              ActionBar actionBar = getActionBar();
              actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
      
              ArrayAdapter<String> adapter = new ArrayAdapter<String>(
                      MainActivity.this, android.R.layout.simple_dropdown_item_1line,
                      choices);
              ListViewAdapter adapter1 = new ListViewAdapter(MainActivity.this);
              actionBar.setListNavigationCallbacks(adapter1,
                      new OnNavigationListener() {
                          @Override
                          public boolean onNavigationItemSelected(int itemPosition,
                                  long itemId) {
                              Toast.makeText(MainActivity.this,
                                      choices[itemPosition], Toast.LENGTH_SHORT)
                                      .show();
                              return false;
                          }
                      });
          }
      
          @Override
          public boolean onCreateOptionsMenu(Menu menu) {
              // Inflate the menu; this adds items to the action bar if it is present.
              getMenuInflater().inflate(R.menu.main, menu);
              return true;
          }
      
          public class ListViewAdapter extends BaseAdapter {
      
              private LayoutInflater mInflater;
      
              public ListViewAdapter(Context con) {
                  // TODO Auto-generated constructor stub
                  mInflater = LayoutInflater.from(con);
              }
      
              public int getCount() {
                  // TODO Auto-generated method stub
                  return choices.length;
              }
      
              public Object getItem(int position) {
                  // TODO Auto-generated method stub
                  // return product_id1.size();
                  return position;
              }
      
              public long getItemId(int position) {
                  // TODO Auto-generated method stub
                  // return product_id1.get(position).hashCode();
                  return position;
              }
      
              @SuppressLint("NewApi")
              public View getView(final int position, View convertView,
                      ViewGroup parent) {
                  // TODO Auto-generated method stub
                  final ListContent holder;
                  View v = convertView;
                  if (v == null) {
                      v = mInflater.inflate(R.layout.scan_row1, null);
                      holder = new ListContent();
      
                      holder.name = (TextView) v.findViewById(R.id.textView1);
      
                      holder.img_p = (ImageView) v.findViewById(R.id.imageView1);
      
                      // holder.total_rate.setOnClickListener(mOnTitleClickListener1);
      
                      v.setTag(holder);
                  } else {
      
                      holder = (ListContent) v.getTag();
                  }
      
                  holder.img_p.setBackground(getResources().getDrawable(
                          choices_img[position]));
                  holder.name.setText("" + choices[position]);
      
                  return v;
              }
          }
      
          static class ListContent {
      
              ImageView img_p;
              TextView name;
      
          }
      
      }
      

      如果您只想要图标,那么只需在 scan_row1.xml 中使用图像视图

      【讨论】:

      • 谢谢@Dhawal。我设法得到这个屏幕。我想要实现的是在操作栏上只有一个图标,而不是所选项目(rim_icon 和文本“RIM”)。我希望在点击操作栏图标时出现 3 个列表选项。
      猜你喜欢
      • 1970-01-01
      • 2014-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多