Как настроить TextView внутри Spinner?

У меня есть Spinner с ArrayAdapter, который передает в него значения. Макет для этого представления выглядит примерно так:

        <TextView
           android:text="Household Income: "
           android:layout_width="wrap_content"
           android:layout_height="fill_parent"
           android:gravity="center_vertical" />

        <Spinner
           android:id="@+id/incomespinner"
           android:layout_width="fill_parent"
           android:layout_height="wrap_content"
           android:padding="2dip"  />

Проблема в том, что текст слишком длинный для просмотра, и в результате получается очень уродливый счетчик. Как видно на скриншоте:

alt text
(источник: janusz и janusz. де)

Я попытался передать идентификатор моего собственного TextView в адаптер, но каждый раз, когда должен отображаться счетчик, я получаю исключение, что предоставленный мной идентификатор недействителен:

04-26 17:38:39.695: ERROR/AndroidRuntime(4276): android.content.res.Resources$NotFoundException: Resource ID #0x7f09003a type #0x12 is not valid

Где я должен определить TextView? В отдельном xml-файле? С окружающей группой просмотра?

Мне бы очень помогло, если бы я мог увидеть пример инициализации адаптера и определения textview?


person Janusz    schedule 26.04.2010    source источник


Ответы (3)


Переопределите метод getView адаптера, чтобы создать настраиваемый элемент представления списка.

View getView(int position, View  convertView, ViewGroup  parent) {
     TextView tv = null;
     if(covertView instanceof TextView) {
          tv = (TextView) convertView;
     } else {
          tv = new TextView(this);
          tv.setText("Awesome Text");
     }
     return tv;
}

Кроме того, когда вы создаете адаптер, вы можете передать макет для использования с элементом, поэтому в этом случае ConvertView будет RelativeLayout или LinearLayout.

person Robby Pond    schedule 26.04.2010

Ответ заключался в том, чтобы удалить дополнение из определения Spinner. Каждый раз, когда я устанавливаю заполнение Spinner, текст теряет форму.

Рисуемый счетчик использует поле заполнения из девяти патчей, чтобы определить, где рисовать содержимое. Если я установлю отступ вручную, определение отступа из поля заполнения будет переопределено.

Если вы хотите установить отступ в дополнение к блоку заполнения, вам нужно обернуть все внутри этого блока заполнения в дополнительный контейнер макета.

person Janusz    schedule 06.05.2010

используйте /home/user/android-sdk-linux/tools/./draw9patch (это для Linux), в Windows перейдите к инструментам в каталоге android-sdk-windows и выполните draw9patch.

и используйте такое изображение, например:

введите здесь описание изображения

Обратите внимание на черные линии на изображении. (эти черные линии генерируются draw9patch)

Результаты изображения добавляются в файл с расширением 9, например: img.9.png (IMG EXPANSIVE HORIZONTAL AND VERTICAL)

person Namor Alves    schedule 25.01.2012