Перейти к содержанию
  • Регистрация
  • 0
ENERGY

TListView и не прозрачная иконка при выделении пункта на Android

Вопрос

Меня это проблема преследует со времен VCL...

Подскажите как же ее решить...

FMX TListView - ItemAppearanceName = ImageListItem.   Лежит fmx TimageList, в настройках указано 16x16 и прорачный цвет clNone, добавил одну иконку 16x16 с прозрачностью. Если запустить под Windows 10  все ок. Если запустить под Android то при выделении (selected) вместо прозрачности белый цвет. В результате иконка некрасиво обрамлена в белом квадрате.. Иконку делал в Axiallis IconWorkShop, сохранил как ico,  Пробовал заливать белым вместо прозрачного, и затем ставить в TimageList белый как прозрачный - тоже самое...

Что же делать...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Рекомендуемые сообщения

  • 0

нужно использовать PNG картинку, тогда не будет проблем

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Вобщем дело не в формате. Дело оказалось почему то в размере. 

Я взял иконку размером 32x32 (scale 1) и поставил в список, и вуаля - везде есть прозрачность. Но иконка того же размера в Android телефоне как и была 16x16 . Теперь вопрос - какой размер иконок должен быть? И почему размер иконок не меняется при отображении в LV, хотя размер иконки и TImageImage менялся (был 16x16 и иконка тоже, поставил 32x32 и иконку тоже кинул 32x32)

 

Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Ага, понял как он работает. Значит TimageList 32x32. Для каждой картинки (ItemIndex ) в списке можно добавлять разные размеры, указав их из файлов. Затем система выбирает нужный размер, в зависимости от каких то критериев. 

К примеру, для картинки с индексом 0 я добавил 4 разные (в смысле не по размеру, в вообще - другие) иконки - одну 16x16 (scale 1), вторую 24x24 (1,5) и 3. 32x32 и 4. 48x48 для теста.

Под Windows показалась картинка 24x24.

Под Android на HTC телефоне тоже показалась картинка 24x24. 

А где можно почитать про стандарты - в каком случае какой размер подхватывается (видимо это зависит от платформы и dpi экрана) и вообще какие размеры по умолчанию должны присутствовать?

Изменено пользователем ENRGY

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Спасибо за ответ. Я это читал, но как то не особо осветили они эту тему.

В общем по экспериментам - TimageList сам выбирает нужные размер, в зависимости от размера контрола, на основе метода TimageList.BestSize (fixme?)

К примеру если TListItem в ListView  имеет высоту 44, и  в списке картинок есть картинка < 44 - то будет показана она (например 32x32 ). Если там только картинка 16x16. то она будет увеличена или уменьшена, если картинка больше 44. Желательно сразу подбирать правильный размер (ну или рядом), т.к. если увеличить 16x16 в 32x32 она будет размыта. А если поставить слишком большие картинки (например 128 ), то список будет дольше грузиться и тратить ресурсы на не нужную работу... Конечно измененные картинки кэшируются (8 на текущий момент?)

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

Изменено пользователем ENRGY

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


  • Похожий контент

    • От Виталий Иванов
      Есть такая идея. 
      Загружаю в TListView много элементов (от 500 до 1000 может и более) ситуация вынуждает грузить именно столько . Так вот когда начинаю создавать их кастомно после создания приходится вызвать oItem.Adapter.ResetView(oItem) (Если этого не делать то не корректно рассчитывается высота и ещё пару багов )  что соответсвенно вызывает подвисание интерфейса на Windows все круто это не так в глаза бросается, а на Android печалька форма зависает от 10 до 30 секунд 
      Так вот сам вопрос можно ли как это сделать в отдельном потоке что бы пользователю показывать какой нибудь Waiter. Или может кто как по другому предложит реализовать ? 
      Смотрел в сторону динамической подгрузки итемов но хотелось бы что и его поиск работал . 
    • От Alex Bozhko
      Вопрос из серии "чего-то странного хочется".
      Предположим, я хочу написать собственный ListView. Если я наследую от TListView, то всё нормально. Я его регистрирую с помощью процедуры Register
      Примерно так:
      procedure Register; begin RegisterComponents('<Моя вкладка>', [TМойListView]); end; И всё работает.
      Но, как показывает практика, в том числе пример Равиля Зарипова (https://github.com/rzaripov1990/ModernListView) для того, что бы написать полноценный ListView, наследоваться надо от предков TListView, едва ли не от TStyledControl.
      Дальше возникает вопрос. Где и как правильно регистрировать вновь созданный компонент?
      Если зарегистрировать компонент с помощью процедуры Register, то при размещении компонента на форме в окне Structure к вновь созданному компоненту не привязывается ItemAppearence.

       
      Да и IDE падает.
      Прилагаю файл с кастомным ListView. Сделан по аналогии с оригинальным, изменены только названия.
       
       
      My.FMX.ListView.zip
    • От Виталий Иванов
      Вопрос к экспертам
      Возникла необходимость и хотел спросить можно ли как-то сделать TlistViewItem  прозрачным, а то получается что сам TlistView может быть прозрачным а его итем нет . Это как-то же делаться у TListBoxItem. 
      Заранее огромное спасибо.
    • От x11
      ListView в режиме appearance.
      Добавил пару TListItemGlyphButton, указал в свойстве ButtonType - CheckBox. Но при работе приложения - пустота.
      Другие типы кнопок тоже не отображает.
      ЧЯДНТ.
    • От x11
      По совету krapotkin`a
      http://fire-monkey.ru/topic/4595-listview-скрывает-повторяющийся-текст-заголовков/?do=findComment&comment=29209
       
      Забросил LiveBinding при заполнении TListView и начал заполнять ручками.
      Почти всё хорошо за исключением загрузки картинки из базы.
      При использовании LiveBinding картинка грузилась, а теперь просто пустота.
      На Windows картинки грузятся и отображаются, а на Андроиде не хотят.
       
      Вот часть кода загрузки
      Var stream: TBlobStream; ... begin .... lv.BeginUpdate; try lv.Items.Clear; qObjects2.close; qObjects2.Open; while not qObjects2.Eof do begin item := lv.Items.Add; item.Data[sItemId] := qObjects2id.AsString; item.Data[sItemPrice] := qObjects2price.AsString; item.Data[sItemType] := qObjects2type_name.Value; ... ... ... ListItemImage := Item.Objects.FindObjectT<TListItemImage>(sItemImg); stream := TBlobStream.Create(qObjects2img, bmRead); try if stream.Size <= 0 then ListItemImage.ImageIndex := 0 else ListItemImage.Bitmap := TBitmap.CreateFromStream(stream); finally stream.Free; end;  
      К ListView прикреплен список картинок, где есть картинка-пустышка, которая грузится, если у записи нет картинки.
      вот этой строкой ListItemImage.ImageIndex := 0
      картинки-пустышки нормально отображаются и на Андроид-устройстве в том числе.
      Ошибок нет, а просто пустой TListItemImage там, где должна быть картинка.
      Может, я какое-то свойство забыл включить у TListItemImage?
      При отладке видно, что картинка загружается из базы.
       
       
    • От x11
      Сделал такой эксперимент в событии OnUpdateObjects
      if AItem.Purpose in [TListItemPurpose.Header] then Memo1.Lines.Add(AItem.Text);  
      И в memo загрузилось в два раза больше строк, чем элементов списка.
      Это нормально, так и должно быть?
    • От x11
      Не могу понять, что случилось в проекте с TDataModule.
      Проект мультиплатформенный. В прошлый раз сохранил, закрыл, ничего необычного. Сегодня открываю, а мне ошибку Delphi Berlin показывает.
       
      И действительно, у TImageList отсутствует свойство source. Открываю, а он выглядит по-другому, как будто из VCL.
      Закрываю проект, создаю мультиплатформенную форму, кладу TImageList на форму и о чудо - совершенно другой TImageList и свойство Source есть.
      Что случилось с моим TDataModule? Как среде дать понять, что это мультиплатформенный проект?

    • От x11
      Не знаю, куда правильно задать вопрос. Решил здесь.
      Обычная стандартная связка TImageList + TActionList+TSpeedButton.
      в TImageList загрузил картинку 32*32.
      Всё связал и она появилась у кнопки на панели.
      Обратил внимание, что картинка 32*32 маловата и я решил загрузить картинку 48*48.
      Удалил из TImageList картинку и загрузил новую. Но размер картинки на кнопке остался 32*32.
      А потом ещё и исчезла картинка из TActionList.
       
      В TImageList только одна картинка.
      Delphi Berlin.


    • От DrMzi
      Доброго времени суток!
      Собираю тестовый проект под Win, иконки вижу.
      C:\Users\Public\Documents\Embarcadero\Studio\19.0\Samples\Object Pascal\Multi-Device Samples\User Interface\ListView\ListViewImageIndex
      Собираю тестовый проект под Android, иконок нет.
      Что я делаю не так ?

      Поправка. Такое поведение у apk на xiaomi mi5, запустил на Philips Xenium - иконки есть. 
       
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...