如何用图像而不是文字创build一个微调器?

鉴于下面的代码,有可能有图像,而不是文本在行星arrays?

Spinner s = (Spinner) findViewById(R.id.spinner); ArrayAdapter adapter = ArrayAdapter.createFromResource( this, R.array.planets, android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); s.setAdapter(adapter); 

  <string name="planet_prompt">Choose a planet</string> <string-array name="planets"> <item>Mercury</item> <item>Venus</item> <item>Earth</item> <item>Mars</item> <item>Jupiter</item> <item>Saturn</item> <item>Uranus</item> <item>Neptune</item> </string-array> 

Solutions Collecting From Web of "如何用图像而不是文字创build一个微调器?"

是的,看看下面的代码:


 array of data // stores the image database icons private static Integer[] imageIconDatabase = { R.drawable.ball, R.drawable.catmouse, R.drawable.cube, R.drawable.fresh, R.drawable.guitar, R.drawable.orange, R.drawable.teapot }; // stores the image database names private String[] imageNameDatabase = { "ball", "catmouse", "cube", "fresh", "guitar", "orange", "teapot" }; 

创buildhashmaps列表

 private void initializeImageList() { // TODO Auto-generated method stub for (int i = 0; i < imageNameDatabase.length; i++) { map = new HashMap<String, Object>(); map.put("Name", imageNameDatabase[i]); map.put("Icon", imageIconDatabase[i]); spinnerList.add(map); } ImageView imageView = new ImageView(this); imageView.setBackgroundResource((spinnerList.get(0).get("Icon")); spinnerList.get(0).get("Name"); } 

将微调器分配给适配器

 public void createAddDialog() { // TODO requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.list_editoradd_dialog); Spinner spin = (Spinner) findViewById(R.id.spinnerAddImageList); CustomSpinnerAdapter adapter = new CustomSpinnerAdapter(this, spinnerData, R.layout.spinner_view, new String[] { "Name", "Icon" }, new int[] { R.id.imageNameSpinner, R.id.imageIconSpinner }); spin.setAdapter(adapter); } 

上面使用的适配器如下所示。

 package com.tcs.CustomListViewGeneration; import java.util.HashMap; import java.util.List; import java.util.Map; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.SimpleAdapter; import android.widget.TextView; class CustomSpinnerAdapter extends SimpleAdapter { LayoutInflater mInflater; private List<? extends Map<String, ?>> dataRecieved; public CustomSpinnerAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to) { super(context, data, resource, from, to); dataRecieved =data; mInflater=LayoutInflater.from(context); } @SuppressWarnings("unchecked") public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = mInflater.inflate(R.layout.spinner_view, null); } // HashMap<String, Object> data = (HashMap<String, Object>) getItem(position); ((TextView) convertView.findViewById(R.id.imageNameSpinner)) .setText((String) dataRecieved.get(position).get("Name")); ((ImageView) convertView.findViewById(R.id.imageIconSpinner)) .setBackgroundResource(dataRecieved.get(position).get("Icon"))); return convertView; } } 

我只是需要一个超级简单的解决scheme,以一个固定的图像在一个微调,所以我这样做:

 public class SimpleImageArrayAdapter extends ArrayAdapter<Integer> { private Integer[] images; public SimpleImageArrayAdapter(Context context, Integer[] images) { super(context, android.R.layout.simple_spinner_item, images); this.images = images; } @Override public View getDropDownView(int position, View convertView, ViewGroup parent) { return getImageForPosition(position); } @Override public View getView(int position, View convertView, ViewGroup parent) { return getImageForPosition(position); } private View getImageForPosition(int position) { ImageView imageView = new ImageView(getContext()); imageView.setBackgroundResource(images[position]); imageView.setLayoutParams(new AbsListView.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); return imageView; } 

}

然后在代码中,你可以像这样使用它:

  SimpleImageArrayAdapter adapter = new SimpleImageArrayAdapter(context, new Integer[]{R.drawable.smiley1, R.drawable.smiley2, R.drawable.smiley3, R.drawable.smiley4, R.drawable.smiley5}); spinner.setAdapter(adapter);