Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
#1

Размер строк в списке - Программирование Android

18.03.2014, 21:21. Просмотров 717. Ответов 9
Метки нет (Все метки)

Пробую написать некое подобие зума строк в списке.
Написал свой адаптер. Задаю сложные (многокомпонентные) строки списка как xml.
Пытаюсь кнопкой увеличить и уменьшить размер шрифта в строках.

Когда увеличиваю шрифт, увеличивается и общий размер строки. Но когда шрифт уменьшаю, общий размер строки остается увеличеным! Как его уменьшить? Еть какая-то команда "пересчитать строку/строки"? Перепробовал десяток вариантов и пока не получилось... Кроме как задавать вручную общий размер строки не вижу решения, а это уже крайняя мера (слишком много нюансов прийдется учитывать).

Добавлено через 35 минут
еще заметил... при увеличении шрифта иногда увеличивается высота строки за счет переноса строк. при уменьшении на каком-то этапе 2 строки превращаются в одну. При этом корректно уменьшается высота строки. Но при дальнейшем уменьшении шрифта высота строки больше не уменьшается.

Добавлено через 2 часа 21 минуту
еще заметил... если шрифт строки увеличить, а потом уменьшить, строка прижимается к нижнему краю старой позиции шрифта даже если стоит выравнивание по центру или "android:gravity="top""
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.03.2014, 21:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Размер строк в списке (Программирование Android):

Как подгонять размер диалоговых окон по размер экрана? - Программирование Android
Здравствуйте! Как подгонять размер диалоговых окон по размер экрана? У меня есть класс, унаследованный от DialogFragment. При запуске...

Размер кнопок, не пойму что влияет на их размер - Программирование Android
Нужно специфичное расположение кнопок, добиваюсь этого вложением множества вертикальных и горизонтальных Layout-ов. В главный (Hor)...

Размер шрифта, размер контролов - Программирование Android
Почему когда делаю TextView.setTextSize(14); на одном устройстве показывает нормально, а на другом показывает в 2 или 3 раза больше?? ...

Изменить размер маркера в ненумерованном списке - HTML, CSS
Приветствую. Как сделать так, чтобы кружки были очень большие (диаметр кружка = высота буквы)? <ul type="disc"> <li>Раз</li> ...

Как убрать точки в списке и настроить размер формы - HTML, CSS
Доброго времени суток Есть форма, выполненная через список: <div id="forma">Вы можете задать нам вопрос через эту форму: ...

Перемещение строк в списке - MS Access
приветствую, делаю форму где можно перемещать строки,сейчас столкнулся с проблемой,хотелось бы чтобы в текст бокс записывались значения...

9
Ybrjk
26 / 26 / 2
Регистрация: 06.11.2010
Сообщений: 77
19.03.2014, 09:17 #2
Покажи код.
0
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
19.03.2014, 12:51  [ТС] #3
Весь код выкладывать не буду - его СЛИШКОМ много! Но примерно это выглядит так:

Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// кусок адаптера
 
public int zoom = 1;
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            convertView = mInflater.inflate(R.id.my_item, null);
        }
 
        //задаю поля и размеры
        String str1;
        TextView tv1;
        ViewGroup.LayoutParams lp;
        tv1 = (TextView)item.v.findViewById(R.id.tv_1);
 
str1 = "item+_"+zoom;
// задатю текст и размер шрифта тоже из ZoomSize();
        lp = tv1.getLayoutParams();
        lp.height = ZoomSize();
        tv1.setLayoutParams(lp);
 
        return convertView;
    }
 
public int ZoomSize(); { //это примерно
if (zoom==1) return 10;
if (zoom==2) return 20;
if (zoom==3) return 30;
}
 
public int ZoomSet(newzoom); { //это примерно
zoom = newzoom;
notifyDataSetChanged();
}


Добавлено через 5 минут
Текст задаю примерно так:
tv1.setText(Html.fromHtml(str1));
tv1.setTextSize(ZoomSize());

конечно реальный код намного сложнее. это часть адаптера почти в 50 кб кода...
0
verylazy
Заблокирован
19.03.2014, 14:31 #4
Весь ответ писать не буду, его слишком много.
Где-то в коде ошибка.
Реальный ответ намного сложнее сложнее, там строк 50 будет, не меньше.
1
Ybrjk
26 / 26 / 2
Регистрация: 06.11.2010
Сообщений: 77
19.03.2014, 14:58 #5
посмотри в сторону метода notifyDataSetChanged()
0
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
19.03.2014, 16:03  [ТС] #6
Цитата Сообщение от Ybrjk Посмотреть сообщение
notifyDataSetChanged()
Я этот метод полностью переписал. Но проблема явно не в этом.
Почти получалось когда вместо
if (convertView == null) {
convertView = mInflater.inflate(R.id.my_item, null);
}
вставлял
convertView = mInflater.inflate(R.id.my_item, null);
но... ОЧЕНЬ сильно мерцает после notifyDataSetChanged. Список как будто очищается а потом перезаполняется.

Поэтому хочу просто пересчитать размер лейаута с учетом нового шрифта! Особенно при его уменьшении! Подозреваю что для этого есть некая команда API, которую я просто еще не нашел...

Цитата Сообщение от verylazy Посмотреть сообщение
Весь ответ писать не буду, его слишком много.
Где-то в коде ошибка.
Реальный ответ намного сложнее сложнее, там строк 50 будет, не меньше.
Последнее время не встречаю от Вас дельных советов...
Вы действительно хотите чтобы я сюда выложил ВСЕ исходники моего проекта, над которыми я бьюсь уже больше полугода и которых же больше 1.5 мб КОДА написаного лично мной? Выложеных кусков кода вполне хватает что-бы обьяснить проблему. Мой клас адаптера использует минимум 3 потока для одной лишь скоростной отрисовки элементов из базы данных, свой рисованый скроллинг использующий мультитатч и подвижную инфо-панель по выделеному элементу. Даже Log.e() я заменил своим классом... Оригинальный проект Вы будете неделю читать...
0
verylazy
Заблокирован
19.03.2014, 16:14 #7
Я когда вижу (да да, я чувствую это, как ни странно это звучит) что человек думал над проблемой, то могу даже тестовый проект создать у себя и проверить что нужно.

Когда человек задает вопрос, и тут же, следом, комментирует что-то типа "вам это не надо", "это не интересно", "но проблема явно не в этом" желание сильно вникать пропадает.
Если человек уже знает что проблема "не в этом, а в том" то может стоит додумать самому? Это я не указываю что делать, мысль вслух просто.

Дельные советы я смогу раздавать когда что-то буду реально знать и понимать.
0
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
19.03.2014, 16:27  [ТС] #8
Ладно! Проблему упрощаю!
Обычный
XML
1
2
3
4
5
6
7
8
9
    <TextView
        android:id="@+id/tv_Text1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textSize="20dp"
        android:background="#ff000044"
        android:textColor="#ff949fff"
        android:text="Application info"
    />
и две кнопки с двумя реакторами.

Java
1
2
3
4
5
6
7
8
9
10
    public int zoom1 = 10;
    public void bt_Zoom1_OnClick(View v) {
        zoom1 = zoom1 + 2;
        ((TextView)findViewById(R.id.tv_Text1)).setTextSize(zoom1);
    }
 
    public void bt_Zoom2_OnClick(View v) {
        zoom1 = zoom1 - 2;
        ((TextView)findViewById(R.id.tv_Text1)).setTextSize(zoom1);
    }
Увеличивает правильно. Но при уменьшении - высота tv_Text1 не меняется, уменьшается шрифт, текст остается прижатым к низу

Добавлено через 2 минуты
Цитата Сообщение от verylazy Посмотреть сообщение
"но проблема явно не в этом".
А для меня это значит что я уже проверил эту тему вдоль и поперек. Разобрал десятки коомбинаций в этом направлении и уверен что проблема в другой области или что изменения в этой не помогут...
0
verylazy
Заблокирован
19.03.2014, 16:51 #9
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
а если так:
Java
1
2
3
4
5
public void bt_Zoom2_OnClick(View v) {
        zoom1 = zoom1 - 2;
        ((TextView)findViewById(R.id.tv_Text1)).setTextSize(zoom1);
        ((TextView)findViewById(R.id.tv_Text1)).setText(getText(),TextView.BufferType.SPANNABLE);
}
1
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
19.03.2014, 18:32  [ТС] #10
Ура! Заработало! И в списке тоже! Правда еще не понял как... что делает этот параметр?

Чего я только не пробовал...
tv1.refreshDrawableState();
tv1.invalidate();
и вручную уменьшал размеры строк и пытался очищать поля перед заполнением...

знал что нехватает одной-двух команд для пересчета отрисовки... и сильно растерялся когда меня попросили выслать полный код для "понимания проблемы"... я его больше 10 минут вырезал из 3х классов-наследников... у меня в getView нет отрисовщика. Этим занимается отдельный поток определяемый в наследнике...
0
19.03.2014, 18:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.03.2014, 18:32
Привет! Вот еще темы с ответами:

Поиск в списке строк - C#
Итак, заполнил я из двух файлов списки. Допустим, строка представляет собой вид a;b;c;123;d;e в одном файле. В другом a;b;123;231 Мне...

Повторы строк в списке - Delphi
Пытаюсь сделать удаление повторяющихся строк var i, j : integer; begin Memo1.Lines.BeginUpdate; i :=...

Объединение строк в списке - Python
Здравствуйте, подскажите, пожалуйста, новичку на Пайтоне. Есть список: data = нужно склеить каждые два элемента между собой и получить...

Отображение строк в Списке наблюдений - Lazarus
Друзья! Использую Lazarus IDE 1.6 (fpc 3.0.0, Windows XP SP3), при отладке простой консольной программы в окне отладчика &quot;Список...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.