Форум программистов, компьютерный форум, киберфорум
Наши страницы
Xamarin
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
АндрюхаРостовск
23 / 23 / 3
Регистрация: 03.04.2013
Сообщений: 221
1

Ограниченная вместимость TextView

30.01.2017, 22:19. Просмотров 1333. Ответов 30
Метки нет (Все метки)

Доброго дня. Я вообще-то не специализируюсь на Android, а занимаюсь кросс платформенной разработкой - C#/Xamarin, но столкнулся с проблемой, которая имеет непосредственное отношение к Android, поэтому попрошу модераторов не переносить тему в другой раздел.
Суть проблемы: Xamarin'овский элемент вывода текста - тэг XML разметки Label, соответствует TextView. При компиляции один элемент преобразовывается в другой(для каждой платформы нативный). Но Label в своей основе имеет тип string C# и может хранить, если верить MCDN, до 2 ГБ текста, т.е около миллиона символов. И загнал я в этот самый Label 2 листа текста - около 5000 букв без пробелов. При отладке на Win8 проблем никаких, текст загружен весь. А вот на устройстве Android (2 смартафона проверял) выводиться только половина текста. Вот соответственно и хотелось бы узнать, какие ограничения есть на вывод текста в элементе TextView. Пробовал поискать в сети (правда не очень долго), но внятной информации не нашел. Есть ли лимит по количеству символов, или по объему памяти, или еще по каким параметрам?

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.01.2017, 22:19
Ответы с готовыми решениями:

Как можно сделать что бы высота TextView была неизменной?
Здравствуйте ! Когда ввожу в TextEdit то подымается клавиатура телефона . При...

Текст из TextView перенести в другой TextView по нажатию Button
Люди, помогите плиз. Недавно начал ковырять программирование под Android. Хотел...

TextView txt = new TextView(this); - ошибка
Возникла проблема с динамическим создание TextView в цыкле, хотя в другом месте...

Вместимость vector
Функция vector.capacity() возвращает неправильные значения. Вот проверочный...

Вместимость регистров
Читаю одну статью по АСМу. До сих пор искренне думал, что в 2-х байтовый...

30
tezaurismosis
Администратор
Эксперт .NET
8594 / 3891 / 730
Регистрация: 17.04.2012
Сообщений: 8,662
Записей в блоге: 14
03.02.2017, 00:03 21
Покопался я в исходниках Xamarin, и не нашёл очевидной причины такого поведения.
Текст для TextView хранится как CharSequence, которая в Xamarin - просто коллекция символов (IEnumerable<char>) и не имеет какого-то специфического поведения с ограничением количества символов или буферизацией.
Поэтому весь текст одномоментно загружается в память, и это может быть причиной проблемы.
Попробуйте загружать текст порциями
C#
1
2
3
4
5
6
7
8
9
10
using System.IO;
// ...
const int bufferSize = 1024;
char[] buffer = new char[bufferSize];
using (StreamReader reader = new StreamReader(stream)) {
    int count = 0;
    while ((count = reader.ReadBlock(buffer, 0, bufferSize)) != 0) { 
        LicenseText.Text += new string(buffer, 0, count));
    }
}
К слову, строка для Label.Text всё равно будет храниться в памяти целиком.
0
АндрюхаРостовск
23 / 23 / 3
Регистрация: 03.04.2013
Сообщений: 221
03.02.2017, 14:40  [ТС] 22
tezaurismosis, увы, не работает. Пока протестировал только на Sаmsung S4, все то же - андроид выводит не весь текст, на десктопе Win8.1 все как положено. Заметил другое, в технических целях вставил строку-разделитель "---", так вот количество выведенных символов уменьшилось непропорционально - пропала целая строка. Судя по всему ограничение и правда на вывод количества строк. Но опять же: где это регламентировано?
Чуть позже погоняю на устройстве iOS, посмотрим что получится.

Добавлено через 44 минуты
Ну что сказать, Apple тоже не подвел - 5S вывел весь текст, как порциями, так и разом. Видимо дело в устройствах Android. Только вот что с ними не так?) Прям даже подмывает написать разработчикам Google.
0
stele
27 / 27 / 12
Регистрация: 29.02.2016
Сообщений: 99
03.02.2017, 17:18 23
А какое значение MaxLenght у TextView? И это ограничение не ксамарина, а андроида.
0
АндрюхаРостовск
23 / 23 / 3
Регистрация: 03.04.2013
Сообщений: 221
03.02.2017, 17:32  [ТС] 24
А кто ж его знает? И как это в андроиде поменять? И где про эти ограничения можно посмотреть?

Цитата Сообщение от stele Посмотреть сообщение
И это ограничение не ксамарина, а андроида.
О чем и была вся эта тема
0
vxg
Модератор
3265 / 2063 / 325
Регистрация: 13.01.2012
Сообщений: 8,002
03.02.2017, 17:34 25
АндрюхаРостовск, не доказано) может тема об ограничениях порта xamarin под андроид)
0
stele
27 / 27 / 12
Регистрация: 29.02.2016
Сообщений: 99
03.02.2017, 17:37 26
Цитата Сообщение от АндрюхаРостовск Посмотреть сообщение
А кто ж его знает? И как это в андроиде поменять?
А самому посмотреть на нужном устройстве textViewX.MaxLenght?
0
АндрюхаРостовск
23 / 23 / 3
Регистрация: 03.04.2013
Сообщений: 221
03.02.2017, 17:39  [ТС] 27
stele, если бы я знал, как это делается...

Возможно и не было этой темы)
0
stele
27 / 27 / 12
Регистрация: 29.02.2016
Сообщений: 99
03.02.2017, 17:57 28
АндрюхаРостовск, если не ошибаюсь, Гугл не рекомендует в TextView выводить большой объём текста и он ограничен возможностью системы выделить память и неким максимальным значением (что-то вроде 10000 символов или меньше). Для вывода большого текста нужно либо динамически постранично выводить либо WebView. Так вроде где-то в документации гугла было. Соответственно у ксамаринного текствью будут всё теже ограничения
0
АндрюхаРостовск
23 / 23 / 3
Регистрация: 03.04.2013
Сообщений: 221
03.02.2017, 17:57  [ТС] 29
То есть все упирается в устройство? Не самая радостная новость.
0
stele
27 / 27 / 12
Регистрация: 29.02.2016
Сообщений: 99
03.02.2017, 18:06 30
Ну получается да. Похоже Гугл насильно заставляет программировать правильно. Если в винде нельзя, но если очень хочеся то можно. То на андроиде не забалуешь.
0
АндрюхаРостовск
23 / 23 / 3
Регистрация: 03.04.2013
Сообщений: 221
03.02.2017, 18:25  [ТС] 31
А какое там интересно значение по умолчанию? На сайте для разработчиков нашел 2 параметра TextView: maxLines и maxLength.
maxLength - Set an input filter to constrain the text length to the specified number, т.е. если, я правильно понял, выставляется фильтр, который и не пускает нужный размер. Вот и где может определятся это значение? И можно ли его менять, в методах, определенных для TextView я ничего не нашел.
maxLines - Makes the TextView be at most this many lines tall. When used on an editable text, the inputType attribute's value must be combined with the textMultiLine flag for the maxLines attribute to apply. Этот фильтр задает количество строк, только не понятно, ограничивает ли это вывод в принципе, на уровне системы, или просто задает размер самого тега. И для него существует метод setMaxLines(int maxlines). Так как у меня похоже ограничение по строкам, возможно его применение поможет. Осталось только разобраться, как нативный системный метод прикрутить к проекту))
0
03.02.2017, 18:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.02.2017, 18:25

String и его вместимость
Выгружаю из базы данных информацию. Вся информация не умещается в txt файл....

Как увеличить вместимость окна immediate?
доброе время суток всем! Вопрос по VBA WORD: как увеличить вместимость окна...

Удалить из одного set вместимость другого
Помогите пожалуйста написать кусок кода. У меня есть set N и set v. В сете N...


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

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

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