Spinner с текстом и значками - PullRequest
1 голос
/ 03 мая 2011

мне нужно сделать спиннер с текстом и иконками .. как я могу это сделать? Я только сейчас, как поставить один и тот же значок на все линии счетчика .. Мне нужно поставить разные значки для каждой строки ..

Ответы [ 2 ]

3 голосов
/ 03 мая 2011

Это main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <Spinner android:id="@+id/spinner"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>
</LinearLayout>

Это textandicon.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal">
    <ImageView android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/icon"/>
    <TextView android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="ABC"/>
</LinearLayout>

Это действие: -

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Spinner;

public class SpinnerPractice extends Activity {
    Spinner spinner;
    LayoutInflater inflator;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        spinner = (Spinner) findViewById(R.id.spinner);
        spinner.setAdapter(new NewAdapter());
        inflator = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    class NewAdapter extends BaseAdapter {

        @Override
        public int getCount() {
            return 26;
        }

        @Override
        public Object getItem(int arg0) {
            return null;
        }

        @Override
        public long getItemId(int position) {
            return 0;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            if (convertView == null) {
                convertView = inflator.inflate(R.layout.textandicon, null);
            }
            return convertView;
        }

    }
}

Надеюсь, этопомогает.

0 голосов
/ 03 мая 2011

Простой способ сделать это - использовать ArrayAdapter, созданный с использованием this конструктора .Второй и третий параметры - это идентификатор макета каждой строки (который можно определить в файле XML) и, соответственно, идентификатор текстового поля из этого макета, которое может представлять ваши элементы.

Например, выможет иметь макет, определенный следующим образом (row.xml):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">
      <ImageView
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:src="@drawable/icon"/>
      <TextView
          android:id="@+id/weekofday"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"/>
</LinearLayout>

Затем вы можете создать свой ArrayAdapter следующим образом:

package com.exercise.AndroidCustomSpinner;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.Spinner;

public class AndroidCustomSpinner extends Activity {

    String[] DayOfWeek = {"Sunday", "Monday", "Tuesday",
          "Wednesday", "Thursday", "Friday", "Saturday"};

    @Override
    public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);

      Spinner mySpinner = (Spinner)findViewById(R.id.spinner);
      ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
        R.layout.row, R.id.weekofday, DayOfWeek);
      mySpinner.setAdapter(adapter);
    }
}

Обратите внимание на вызов ArrayAdapter<String>(this, R.layout.row, R.id.weekofday, DayOfWeek);, который определяет строкурасположение как R.layout.row, текстовое поле, которое показывает данные R.id.weekofday и данные в массив DayOfWeek.

Единственным недостатком этого является то, что вы не можете изменить значок для каждого элемента ... еслиВы хотите сделать это, вы хотите переопределить BaseAdapter.getView (), чтобы создать (или повторно использовать) представление для каждой строки счетчика почти так же, как вы сделали бы для ListView.Буквально сотни учебных пособий о том, как это сделать.

...