Графическая проблема с управлением spinner в Android

#android #spinner #scrollview #tablelayout

#Android #spinner #scrollview #tablelayout

Вопрос:

Мое первое (старое) приложение для Android (калькулятор подвески) показывает проблему, для которой я не могу найти решение: управление вращателем на некоторых вращателях показывает прозрачные линии в нежелательных местах. Схема такова: у каждого другого spinner возникает эта проблема, начиная с первого элемента управления spinner. Таким образом, в то время как у вращателей 2, 4, 6, … нет нежелательных линий, у вращателей 1, 3, 5, … они есть.

На следующем изображении (ссылка ниже) сначала показан счетчик в выбранном состоянии, а в невыбранном состоянии — после красного разделителя. В выбранном состоянии прозрачная линия находится на базовой высоте для всего элемента управления, за исключением некоторых мест, где может быть текст кнопки. В невыбранном состоянии ситуация немного отличается.

Я не могу предоставить изображение напрямую:

[…] в качестве механизма предотвращения спама новым пользователям не разрешается публиковать изображения.

Но я могу дать вам ссылку:

Скриншот, иллюстрирующий проблему с графическим вращателем

Приведенный ниже XML-файл res/layout выглядит следующим образом:

 <ScrollView ...>
    <TableLayout ...>
        <TableRow>
            <TextView
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:text="@string/units"
                android:gravity="center_vertical"
                android:paddingRight="5dp"
            />
            <Spinner
                android:id="@ id/unit_spinner"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:drawSelectorOnTop="true"
            />
        </TableRow>
        ...
    </TableLayout>
</ScrollView>
  

Я вижу эту проблему, по крайней мере, начиная с Froyo (Android 2.2). В более ранних версиях (по крайней мере, Android 1.6) этого не было. Ее нет в редакторе графического макета в Eclipse, но я вижу, что она запускает приложение на телефоне и в эмуляторе — это, по крайней мере, согласуется и намекает на проблему, которую я вызываю, делая что-то неправильно ;-).

Комментарии:

1. Используете ли вы пользовательские чертежи в этих кнопках?

2. Нет, все просто стандартно.

Ответ №1:

На самом деле я могу воспроизвести это поведение на Android 2.3. Невозможно на Android 2.2 и ниже.

Не имеет значения, размещаете ли вы Spinner в табличном или относительном описании. Там та же проблема..

Единственным решением для обхода линий было поместить 1px-View между spinner:

 <Spinner android:layout_height="wrap_content" android:id="@ id/spinnerDriver"
    android:layout_width="match_parent" android:layout_below="@id/driverDesc" />

<View android:id="@ id/helper" android:layout_height="1px"
    android:layout_width="match_parent" android:layout_below="@id/spinnerDriver" />

<Spinner android:layout_height="wrap_content" android:id="@ id/spinnerDriver1"
    android:layout_width="match_parent" android:layout_below="@id/helper" />
  

На самом деле это очень, очень, очень… уродливое решение, но оно работает для меня…

Комментарии:

1. Ваша идея работает, но я должен поместить View перед вращателем, чтобы он работал (фактически перед каждым вращателем). Если я помещу два вида перед счетчиком, эффект вернется. Похоже, проблема затрагивает все остальные компоненты, начиная с 1, затем 3, 5, … Для меня проблема теперь звучит как ошибка Android 2.3.

2. Следующее наблюдение: когда я нахожусь в нижней части TableLayout и запускается прокрутка из ScrollView (прокрутка вниз), строки возвращаются. Они исчезают, если я снова прокручиваю вверх. Странно…

3. хм .. понятия не имею.. звучит как ошибка Android, поскольку она работала в предыдущих версиях.. Если я получу какую-либо дополнительную информацию об этом, я опубликую ее здесь…