Страница 1 из 1
Странное поведение
Добавлено: 28 авг 2013, 19:33
Tamachi
Использую SimpleAdapter.
Вот layout шаблона элемента:
Код: Выделить всё
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="66dp"
android:background="#fe2345"
android:baselineAligned="true"
android:gravity="top">
<Button
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:id="@+id/param_name"
android:layout_weight="0.34"
android:background="@drawable/triangle_transparent"
android:width="88dp"
android:minWidth="88dp"
android:maxWidth="88dp"
android:textStyle="bold"
android:typeface="normal"
android:labelFor="@+id/param_value"
android:textAlignment="textStart"
android:singleLine="true"
android:text="name"
android:gravity="center_vertical|left"
android:paddingStart="22dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:id="@+id/param_value"
android:layout_weight="0.56"
android:editable="false"
android:clickable="false"
android:focusable="false"
android:focusableInTouchMode="false"
android:enabled="true"
android:singleLine="true"
android:phoneNumber="false"
android:selectAllOnFocus="false"
android:inputType="text"
android:textIsSelectable="false"
android:textSize="22sp"
android:text="value"
android:gravity="clip_vertical|left"
android:layout_gravity="top"
android:typeface="normal"
android:visibility="visible"
android:paddingTop="4dp"
android:paddingLeft="4dp"
android:paddingBottom="4dp"
android:paddingRight="4dp"
android:autoText="true"
android:background="@drawable/test"
android:layout_marginBottom="12dp"
android:layout_marginTop="12dp"
android:textStyle="bold"
android:layout_marginRight="4dp"
android:layout_marginLeft="4dp" />
</LinearLayout>
Обратите внимание на следующие свойства кнопки:
android:width="88dp"
android:minWidth="88dp"
android:maxWidth="88dp"
Длина кнопки теоретически должна быть 88dp
Теоретически должно, а на практике в каждой строке описываемого Listview кнопка имеет свою длину. Длины всех кнопок разные!!!
Как такое объяснить?
Как сделать одинаковыми длины?
Re: Странное поведение
Добавлено: 28 авг 2013, 20:00
rezak90
всё у тебя не так... читай сначала документацию перед тем как удивляться почему не работает
android:minWidth и android:maxWidth, а так же android:width это для установки размеров ШРИФТА, а не размера кнопки.
что бы ширина всех кнопок была одинаковой то тебе нужно установить android:layout_width="88dp"
Re: Странное поведение
Добавлено: 29 авг 2013, 12:18
Tamachi
Еще вопрос:
между элементами списка видны горизонтальные линии -- разделители.
Их вид задается с помощью свойств divider и deviderHeight.
Разделители присутствуют _между_ записями, но отсутствуют _над_первой_ и _под_последней_ записями.
А как сделать чтобы разделители были везде?
Или наоборот -- чтобы их вообще не было.
Удивило то, что если сказать m_listView.addFooterView (добавить футер), то все разделители исчезают кроме _верхнего_.
(то есть, меняю футер, а изменения происходят в хидере!!!)
Пробовал просто графику снизу и сверху прикручивать, -- тоже не помогло.
Подскажите, есть какой-нибудь надёжный способ управления разделителями?
Уже голову сломал над этой темой!!!
Re: Странное поведение
Добавлено: 29 авг 2013, 12:47
rezak90
что бы удалить разделители нужно кинуть ему null:
что бы поставить разделители:
но как ты правильно заметил то сверху и снизу их не будет, и здесь два выхода:
1) удалить все divider (кинуть ему null), и добавить линию в каждый view лейаут;
2) установить divider, но в главный лейаут добавить ручками линию сверху и снизу самого ListView;
Re: Странное поведение
Добавлено: 29 авг 2013, 13:04
Tamachi
rezak90 писал(а):что бы удалить разделители нужно кинуть ему null:
что бы поставить разделители:
но как ты правильно заметил то сверху и снизу их не будет, и здесь два выхода:
1) удалить все divider (кинуть ему null), и добавить линию в каждый view лейаут;
2) установить divider, но в главный лейаут добавить ручками линию сверху и снизу самого ListView;
Оба варианта уже много раз прорабатывал. Все равно невыходит!
1) Во-первых, удалить все divider не получается. Всегда есть divider по умолчанию. Как от него избавиться -- непонятно. Во-вторых, в каждом лейауте надо будет рисовать две линии (сверху и снизу), но тогда средние разделители будут отличаться по ширине от верхнего и нижнего. А надо чтобы они были одинаковыми.
2) Добавить ручками линии сверху и снизу тоже не получилось из-за особенностей gravity. Если я под ListView кладу ImageView и ставлю ему gravity=top и layout_gravity=top, то ImageView всё равно не хочет быть ровно под ListView. Он либо произвольно перескакивает в позицию "НАД ListView", либо выравнивается по границе фрейма, а не по границе ListView. (То есть между ListView и ImageView оказывается туева куча пространства!!!)
Re: Странное поведение
Добавлено: 29 авг 2013, 18:28
rezak90
Tamachi писал(а):1) Во-первых, удалить все divider не получается. Всегда есть divider по умолчанию. Как от него избавиться -- непонятно. Во-вторых, в каждом лейауте надо будет рисовать две линии (сверху и снизу), но тогда средние разделители будут отличаться по ширине от верхнего и нижнего. А надо чтобы они были одинаковыми.
Удалить все дивайдеры прекрасно получается, смотри может что не так делаешь. На всякий случай можешь ещё попробовать подсунуть пустой "дивайдер", в фотошопе берёшь рисунок 2х2 с пустым слоем и прогоняешь его через nine-path и кидаешь в качестве дивайдера. На счёт линий - рисовать нужно будет одну а не две, например сверху.
Tamachi писал(а):2) Добавить ручками линии сверху и снизу тоже не получилось из-за особенностей gravity. Если я под ListView кладу ImageView и ставлю ему gravity=top и layout_gravity=top, то ImageView всё равно не хочет быть ровно под ListView. Он либо произвольно перескакивает в позицию "НАД ListView", либо выравнивается по границе фрейма, а не по границе ListView. (То есть между ListView и ImageView оказывается туева куча пространства!!!)
Если через LinearLayout не получается то используй RelativeLayout, хотя не пойму что там трудного добавить линию сверху LinearLayout.
Re: Странное поведение
Добавлено: 30 авг 2013, 07:06
Tamachi
rezak90 писал(а):Tamachi писал(а):1) Во-первых, удалить все divider не получается. Всегда есть divider по умолчанию. Как от него избавиться -- непонятно. Во-вторых, в каждом лейауте надо будет рисовать две линии (сверху и снизу), но тогда средние разделители будут отличаться по ширине от верхнего и нижнего. А надо чтобы они были одинаковыми.
Удалить все дивайдеры прекрасно получается, смотри может что не так делаешь. На всякий случай можешь ещё попробовать подсунуть пустой "дивайдер", в фотошопе берёшь рисунок 2х2 с пустым слоем и прогоняешь его через nine-path и кидаешь в качестве дивайдера. На счёт линий - рисовать нужно будет одну а не две, например сверху.
Tamachi писал(а):2) Добавить ручками линии сверху и снизу тоже не получилось из-за особенностей gravity. Если я под ListView кладу ImageView и ставлю ему gravity=top и layout_gravity=top, то ImageView всё равно не хочет быть ровно под ListView. Он либо произвольно перескакивает в позицию "НАД ListView", либо выравнивается по границе фрейма, а не по границе ListView. (То есть между ListView и ImageView оказывается туева куча пространства!!!)
Если через LinearLayout не получается то используй RelativeLayout, хотя не пойму что там трудного добавить линию сверху LinearLayout.
Я быюсь над этой задачей уже 4 дня и три ночи! И складывается впечатление, что средствами андроид это вообще невозможно сделать. Все что расположено рядом с ListView ведёт себя вообще непредсказуемо. Видимо ListView во время перерисовки закрывает соседей и тонкие линии то исчезают вовсе, то множатся, то вдруг теряют выравнивание...
Если знаешь как, то покажи, пожалуйста.
Вот у меня в лейауте лежит так:
Лейаут1(неважно какой)
ListView
Лейаут2(неважно какой)
Лейаут1 и Лейаут2 имеют одинаковую высоту в 20dp
Если у Лейаут2 прописать layout_gravity=top, то он рисуется поверх Лейаут1, частично с ним пересекаясь c ним.
Если у Лейаут2 прописать layout_gravity=bottom, то он прилепляется к самому низу экрана, так что между ListView и Лейаут2 аш полэкрана!
А мне надо, чтобы Лейаут2 начинался ровнехонько там, где кончается ListView!!!
Re: Странное поведение
Добавлено: 30 авг 2013, 12:28
rezak90
Tamachi писал(а):
Вот у меня в лейауте лежит так:
Лейаут1(неважно какой)
ListView
Лейаут2(неважно какой)
Лейаут1 и Лейаут2 имеют одинаковую высоту в 20dp
Если у Лейаут2 прописать layout_gravity=top, то он рисуется поверх Лейаут1, частично с ним пересекаясь c ним.
Если у Лейаут2 прописать layout_gravity=bottom, то он прилепляется к самому низу экрана, так что между ListView и Лейаут2 аш полэкрана!
А мне надо, чтобы Лейаут2 начинался ровнехонько там, где кончается ListView!!!
ты наверное не правильно понимаешь как работать с layout_gravity=top и layout_gravity=bottom ... в товём случае нужно использовать RelativeLayout. Сегодня нашкрябую лейаут и покажу
Re: Странное поведение
Добавлено: 30 авг 2013, 13:31
Tamachi
rezak90 писал(а):Tamachi писал(а):
Вот у меня в лейауте лежит так:
Лейаут1(неважно какой)
ListView
Лейаут2(неважно какой)
Лейаут1 и Лейаут2 имеют одинаковую высоту в 20dp
Если у Лейаут2 прописать layout_gravity=top, то он рисуется поверх Лейаут1, частично с ним пересекаясь c ним.
Если у Лейаут2 прописать layout_gravity=bottom, то он прилепляется к самому низу экрана, так что между ListView и Лейаут2 аш полэкрана!
А мне надо, чтобы Лейаут2 начинался ровнехонько там, где кончается ListView!!!
ты наверное не правильно понимаешь как работать с layout_gravity=top и layout_gravity=bottom ... в товём случае нужно использовать RelativeLayout. Сегодня нашкрябую лейаут и покажу
C RelativeLayout получилось. Спасибо!
Но теперь возникла проблема с поворотом экрана. При этом раньше (с другими лейаутами) этой проблемы не наблюдалось. Проблема выглядит так:
Activity1 с помощью startAcrivityForResult вызывает Activity2, в котором есть поль ввода.
Заполнив поле ввода, пользователь жмет кнопку "ГОТОВО" и возвращает результат обратно в Activity1.
Пока всё работает.
НО, вот последовательноivityсть действий, однозначно приводящая к исключению:
1. Из Activity1 вызвать Activity2
2. Заполнить поле ввода
3 . Изменить ориентацию экрана!!!!!!
4. Нажать на кнопку "ГОТОВО"
5. Увидеть NULL-Pointer-Exception!!!
Ошибка стала наблюдаться после смены лейаута на RelativeLayout.
Совпадение или глюк системы?
Re: Странное поведение
Добавлено: 30 авг 2013, 15:22
Tamachi
С проблемой ориентации экрана справился самостоятельно