Как настроить TextView внутри Spinner? - PullRequest
5 голосов
/ 26 апреля 2010

У меня есть 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"  />

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

альтернативный текст http://janusz.de/~janusz/spinner.png

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

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?

Ответы [ 3 ]

5 голосов
/ 26 апреля 2010

Переопределите метод 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.

3 голосов
/ 06 мая 2010

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

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

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

1 голос
/ 25 января 2012

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

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

enter image description here

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

Результаты изображения добавляются в файл расширения 9, например: img.9.png (IMG, ДОРОГОЙ, ГОРИЗОНТАЛЬНЫЙ И ВЕРТИКАЛЬНЫЙ)

...