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

Vij*_*ant 6 android spinner android-actionbar

我正在开发一个带导航栏的应用程序.现在我试图将添加SpinnerActionBar.

我能够获得我的自定义图标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); 
}
Run Code Online (Sandbox Code Playgroud)

I'm*_*gon 8

只有图标才能Spinner通过几个步骤实现.

步骤1

将您想要的图标放在xml中:

<Spinner
    ...
    android:background="@drawable/ic_sort_white_24dp" />
Run Code Online (Sandbox Code Playgroud)

第2步

然后,在adapterSpinner,覆盖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;
        }
};
Run Code Online (Sandbox Code Playgroud)

说明

我们需要了解getView()适配器中的视图将在Spinner未打开时使用.我们提供可见性gone是因为我们不想看到它,所以留下的是Spinnerxml 的背景,我ic_sort_white_24dp在本例中已经设置了它(步骤1).

不要混淆使用getDropDownView()哪个选项将在Spinner单击后丢弃掉的选项.

奖金截图!

这就是我的样子.希望能帮助到你!

截图


Dha*_*mar 0

检查它的工作情况..

在此输入图像描述

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;

    }

}
Run Code Online (Sandbox Code Playgroud)

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