Google Android - это несложно

Добро пожаловать на форум сайта startandroid.ru
Текущее время: 16 дек 2018, 04:09

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: Странное поведение
СообщениеДобавлено: 28 авг 2013, 19:33 

Зарегистрирован: 17 апр 2013, 00:08
Сообщений: 203
Благодарил (а): 8 раз.
Поблагодарили: 6 раз.
Использую SimpleAdapter.
Вот layout шаблона элемента:

Код: [ Загрузить ] [ Скрыть ]
  1. <?xml version="1.0" encoding="utf-8"?> 
  2.  
  3. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  4.               android:orientation="horizontal" 
  5.               android:layout_width="match_parent" 
  6.               android:layout_height="66dp" 
  7.               android:background="#fe2345" 
  8.               android:baselineAligned="true" 
  9.     android:gravity="top"> 
  10.  
  11.     <Button 
  12.         android:layout_width="wrap_content" 
  13.         android:layout_height="match_parent" 
  14.         android:id="@+id/param_name" 
  15.         android:layout_weight="0.34" 
  16.         android:background="@drawable/triangle_transparent" 
  17.         android:width="88dp" 
  18.         android:minWidth="88dp" 
  19.         android:maxWidth="88dp" 
  20.  
  21.         android:textStyle="bold" 
  22.         android:typeface="normal" 
  23.         android:labelFor="@+id/param_value" 
  24.         android:textAlignment="textStart" 
  25.         android:singleLine="true" 
  26.         android:text="name" 
  27.         android:gravity="center_vertical|left" 
  28.         android:paddingStart="22dp" /> 
  29.  
  30.     <TextView 
  31.             android:layout_width="wrap_content" 
  32.             android:layout_height="fill_parent" 
  33.             android:id="@+id/param_value" 
  34.             android:layout_weight="0.56" 
  35.             android:editable="false" 
  36.         android:clickable="false" 
  37.             android:focusable="false" 
  38.             android:focusableInTouchMode="false" 
  39.             android:enabled="true" 
  40.             android:singleLine="true" 
  41.             android:phoneNumber="false" 
  42.             android:selectAllOnFocus="false" 
  43.             android:inputType="text" 
  44.         android:textIsSelectable="false" 
  45.         android:textSize="22sp" 
  46.         android:text="value" 
  47.         android:gravity="clip_vertical|left" 
  48.         android:layout_gravity="top" 
  49.         android:typeface="normal" 
  50.         android:visibility="visible" 
  51.         android:paddingTop="4dp" 
  52.         android:paddingLeft="4dp" 
  53.         android:paddingBottom="4dp" 
  54.         android:paddingRight="4dp" 
  55.         android:autoText="true" 
  56.         android:background="@drawable/test" 
  57.         android:layout_marginBottom="12dp" 
  58.         android:layout_marginTop="12dp" 
  59.         android:textStyle="bold" 
  60.         android:layout_marginRight="4dp" 
  61.         android:layout_marginLeft="4dp" /> 
  62. </LinearLayout> 


Обратите внимание на следующие свойства кнопки:
android:width="88dp"
android:minWidth="88dp"
android:maxWidth="88dp"
Длина кнопки теоретически должна быть 88dp

Теоретически должно, а на практике в каждой строке описываемого Listview кнопка имеет свою длину. Длины всех кнопок разные!!!

Как такое объяснить?
Как сделать одинаковыми длины?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Странное поведение
СообщениеДобавлено: 28 авг 2013, 20:00 
Аватар пользователя

Зарегистрирован: 26 июн 2012, 13:22
Сообщений: 3422
Откуда: UA
Благодарил (а): 11 раз.
Поблагодарили: 244 раз.
всё у тебя не так... читай сначала документацию перед тем как удивляться почему не работает
android:minWidth и android:maxWidth, а так же android:width это для установки размеров ШРИФТА, а не размера кнопки.
что бы ширина всех кнопок была одинаковой то тебе нужно установить android:layout_width="88dp"

_________________
R.id.team
Политика на форуме запрещена


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Странное поведение
СообщениеДобавлено: 29 авг 2013, 12:18 

Зарегистрирован: 17 апр 2013, 00:08
Сообщений: 203
Благодарил (а): 8 раз.
Поблагодарили: 6 раз.
Еще вопрос:
между элементами списка видны горизонтальные линии -- разделители.
Их вид задается с помощью свойств divider и deviderHeight.

Разделители присутствуют _между_ записями, но отсутствуют _над_первой_ и _под_последней_ записями.

А как сделать чтобы разделители были везде?
Или наоборот -- чтобы их вообще не было.

Удивило то, что если сказать m_listView.addFooterView (добавить футер), то все разделители исчезают кроме _верхнего_.
(то есть, меняю футер, а изменения происходят в хидере!!!)

Пробовал просто графику снизу и сверху прикручивать, -- тоже не помогло.

Подскажите, есть какой-нибудь надёжный способ управления разделителями?

Уже голову сломал над этой темой!!!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Странное поведение
СообщениеДобавлено: 29 авг 2013, 12:47 
Аватар пользователя

Зарегистрирован: 26 июн 2012, 13:22
Сообщений: 3422
Откуда: UA
Благодарил (а): 11 раз.
Поблагодарили: 244 раз.
что бы удалить разделители нужно кинуть ему null:
Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1. android:divider="@null"

что бы поставить разделители:
Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1. android:divider="@drawable/my_divider"

но как ты правильно заметил то сверху и снизу их не будет, и здесь два выхода:
1) удалить все divider (кинуть ему null), и добавить линию в каждый view лейаут;
2) установить divider, но в главный лейаут добавить ручками линию сверху и снизу самого ListView;

_________________
R.id.team
Политика на форуме запрещена


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Странное поведение
СообщениеДобавлено: 29 авг 2013, 13:04 

Зарегистрирован: 17 апр 2013, 00:08
Сообщений: 203
Благодарил (а): 8 раз.
Поблагодарили: 6 раз.
rezak90 писал(а):
что бы удалить разделители нужно кинуть ему null:
Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1. android:divider="@null"

что бы поставить разделители:
Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1. android:divider="@drawable/my_divider"

но как ты правильно заметил то сверху и снизу их не будет, и здесь два выхода:
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 
Аватар пользователя

Зарегистрирован: 26 июн 2012, 13:22
Сообщений: 3422
Откуда: UA
Благодарил (а): 11 раз.
Поблагодарили: 244 раз.
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.

_________________
R.id.team
Политика на форуме запрещена


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Странное поведение
СообщениеДобавлено: 30 авг 2013, 07:06 

Зарегистрирован: 17 апр 2013, 00:08
Сообщений: 203
Благодарил (а): 8 раз.
Поблагодарили: 6 раз.
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 
Аватар пользователя

Зарегистрирован: 26 июн 2012, 13:22
Сообщений: 3422
Откуда: UA
Благодарил (а): 11 раз.
Поблагодарили: 244 раз.
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. Сегодня нашкрябую лейаут и покажу

_________________
R.id.team
Политика на форуме запрещена


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Странное поведение
СообщениеДобавлено: 30 авг 2013, 13:31 

Зарегистрирован: 17 апр 2013, 00:08
Сообщений: 203
Благодарил (а): 8 раз.
Поблагодарили: 6 раз.
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 

Зарегистрирован: 17 апр 2013, 00:08
Сообщений: 203
Благодарил (а): 8 раз.
Поблагодарили: 6 раз.
С проблемой ориентации экрана справился самостоятельно


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Часовой пояс: UTC + 3 часа


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB