テキストの代わりに画像を使ったスピナーを作成するにはどうすればいいでしょうか? 質問する

テキストの代わりに画像を使ったスピナーを作成するにはどうすればいいでしょうか? 質問する

以下のコードでは、配列 planets にテキストではなく画像を入れることは可能でしょうか?

    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>    

ベストアンサー1

スピナー内の固定された画像セットのための非常に簡単なソリューションが必要だったので、次のようにしました。

   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);

おすすめ記事