操作栏中的微调器仅带有图标但不包含所选选项

时间:2013-04-24 05:26:22

标签: android android-actionbar spinner

我正在开发一款带有导航操作栏的应用。现在我正在尝试向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); 
}

3 个答案:

答案 0 :(得分:7)

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

第1步

将您想要的图标放在xml:

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

第2步

然后,在adapter的{​​{1}}中,覆盖Spinner,如下所示:

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,因为我们不希望看到它,因此剩下的是xml中gone的背景,在此示例中我已将其设置为Spinner (第1步)。

请勿与ic_sort_white_24dp混淆,getDropDownView()用于在点击Spinner后丢弃的选项行。

奖金截图!

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

screenshot

答案 1 :(得分:1)

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

有关详细信息和示例,请参阅类似问题的这两个答案:

答案 2 :(得分:0)

检查它的工作情况..

enter image description here

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中的图片视图