Android 操作栏中的微调器,仅具有图标,不具有选定选项
我正在开发一个带有导航操作栏的应用程序。现在,我正在尝试将Android 操作栏中的微调器,仅具有图标,不具有选定选项,android,android-actionbar,spinner,Android,Android Actionbar,Spinner,我正在开发一个带有导航操作栏的应用程序。现在,我正在尝试将微调器添加到操作栏 我可以在操作栏上获得我的自定义图标。但是,当我将条目添加到微调器中时,图标隐藏在选择框后面,第一个项目处于选中状态 我只希望点击图标时,ActionBar中的图标和下拉列表/spinner 这是我的代码: private void initializeMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate
微调器添加到操作栏
我可以在操作栏
上获得我的自定义图标。但是,当我将条目添加到微调器中时,图标隐藏在选择框后面,第一个项目处于选中状态
我只希望点击图标时,ActionBar
中的图标和下拉列表/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);
}
private void初始化菜单(菜单){
MenuInflater充气机=getMenuInflater();
充气机。充气(右菜单。选项,菜单);
View v=(View)menu.findItem(R.id.menuSort.getActionView();
微调器微调器=(微调器)v.findViewById(R.id.bookmarks\u菜单);
书签书签1=新书签();
书签书签2=新书签();
列表=新的ArrayList();
添加(书签1);
添加(书签2);
SpinadAdapter=新的SpinadAdapter(getApplicationContext(),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;
}
}
公共类MainActivity扩展活动{
最后的字符串[]选项={“Android”、“iOS”、“RIM”};
final int[]choices_img={R.drawable.ic_启动器,R.drawable.ios,
R.drawable.black};
@SuppressLint(“新API”)
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ActionBar ActionBar=getActionBar();
actionBar.setNavigationMode(actionBar.NAVIGATION\u MODE\u列表);
ArrayAdapter适配器=新的ArrayAdapter(
MainActivity.this,android.R.layout.simple\u下拉列表\u item\u 1line,
选择);
ListViewAdapter adapter1=新的ListViewAdapter(MainActivity.this);
actionBar.setListNavigationCallbacks(适配器1,
新的OnNavigationListener(){
@凌驾
公共布尔值onNavigationItemSelected(int-itemPosition,
长项目ID){
Toast.makeText(MainActivity.this,
选项[itemPosition],Toast.LENGTH\u SHORT)
.show();
返回false;
}
});
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(R.menu.main,menu);
返回true;
}
公共类ListViewAdapter扩展了BaseAdapter{
私人停车场;
公共ListViewAdapter(上下文con){
//TODO自动生成的构造函数存根
mInflater=LayoutFlater.from(con);
}
public int getCount(){
//TODO自动生成的方法存根
返回选项。长度;
}
公共对象getItem(int位置){
//TODO自动生成的方法存根
//返回产品_id1.size();
返回位置;
}
公共长getItemId(int位置){
//TODO自动生成的方法存根
//返回product_id1.get(position).hashCode();
返回位置;
}
@SuppressLint(“新API”)
公共视图getView(最终整型位置,视图转换视图,
视图组(父级){
//TODO自动生成的方法存根
最终清单内容持有者;
视图v=转换视图;
如果(v==null){
v=最小充气量(R.layout.scan_row1,空);
holder=新的ListContent();
holder.name=(TextView)v.findViewById(R.id.textView1);
holder.img_p=(ImageView)v.findViewById(R.id.imageView1);
//持有人。总利率。设置点击监听器(mOnTitleClickListener1);
v、 setTag(支架);
}否则{
holder=(ListContent)v.getTag();
}
holder.img\u p.setBackground(getResources().getDrawable(
选择(职位);;
holder.name.setText(“+选项[位置]);
返回v;
}
}
静态类ListContent{
图像视图img\u p;
文本视图名称;
}
}
如果您只需要一个图标,那么只需在适配器的scan_row1.xml中使用image view,您需要覆盖getDropDownView()。这将提供微调器行中使用的视图。然后,getView()应返回图标的ImageView
有关更多详细信息和示例,请参见以下两个类似问题的答案:
只有图标微调器
可以通过几个步骤实现
步骤1
将所需的图标放在xml中:
<Spinner
...
android:background="@drawable/ic_sort_white_24dp" />
解释
我们需要了解,适配器中的getView()
是未打开微调器时将使用的视图。我们使可见性消失了,因为我们不想看到它,所以剩下的是xml中微调器的背景,在本例中,我已经将其设置为ic\u sort\u white\u 24dp
(步骤1)
不要与getDropDownView()
混淆,后者用于单击微调器后将下拉的选项行
奖金截图强>
这就是我的样子。希望有帮助
阅读以下内容:谢谢@Dhawal。我设法得到了这个屏幕。我试图实现的是在操作栏上只有一个图标,而不是所选项目(rim_图标和文本“rim”)。我希望在点击操作栏图标时显示3个列表选项。
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;
}
};