我正在开发一款带有导航操作栏的应用。现在我正在尝试向Spinner
添加ActionBar
。
我可以在ActionBar
上获取自定义图标。但是当我向微调器添加条目时,图标将隐藏在选择框后面,并选择第一个项目。
我想在点按图标时只显示ActionBar
和drop-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);
}
答案 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
后丢弃的选项行。
奖金截图!
这就是我的样子。希望它有所帮助!
答案 1 :(得分:1)
在适配器中,您需要覆盖getDropDownView()。这应该提供在微调器的行中使用的视图。然后getView()应该为您的图标返回一个ImageView。
有关详细信息和示例,请参阅类似问题的这两个答案:
答案 2 :(得分: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;
}
}
如果您只想要图标,那么只需使用scan_row1.xml中的图片视图