Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
Tester64
396 / 357 / 46
Регистрация: 22.05.2013
Сообщений: 2,518
1

Размер строк в списке

18.03.2014, 21:21. Просмотров 758. Ответов 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
Ответы с готовыми решениями:

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

Размер кнопок, не пойму что влияет на их размер
Нужно специфичное расположение кнопок, добиваюсь этого вложением множества...

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

Изменить размер маркера в ненумерованном списке
Приветствую. Как сделать так, чтобы кружки были очень большие (диаметр кружка...

Как убрать точки в списке и настроить размер формы
Доброго времени суток Есть форма, выполненная через список: <div...

9
Ybrjk
26 / 26 / 6
Регистрация: 06.11.2010
Сообщений: 77
19.03.2014, 09:17 2
Покажи код.
0
Tester64
396 / 357 / 46
Регистрация: 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 / 6
Регистрация: 06.11.2010
Сообщений: 77
19.03.2014, 14:58 5
посмотри в сторону метода notifyDataSetChanged()
0
Tester64
396 / 357 / 46
Регистрация: 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 / 46
Регистрация: 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
Лучший ответ Сообщение было отмечено Tester64 как решение

Решение

а если так:
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 / 46
Регистрация: 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

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

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

Поиск в списке строк
Итак, заполнил я из двух файлов списки. Допустим, строка представляет собой...


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

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

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