#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, поскольку она работала в предыдущих версиях.. Если я получу какую-либо дополнительную информацию об этом, я опубликую ее здесь…