
Кита
06.09.2017
09:50:43
формс это надстройка, которая так или иначе внутри вызывает платформозависимый код

Ivan
06.09.2017
09:51:43
вопросик: в каком месте программы можно получить реальные размеры UI элементов? В App() и в OnStart() Width возвращает -1

Кита
06.09.2017
09:52:41
а какую задачу ты решаешь?

Ivan
06.09.2017
09:55:39
Пытаюсь сделать квадратные кнопки следующим образом: есть обёртка вертикального стэклэйаута, я вызываю AddRow(int buttonsNumber). Добавляется строка, создаётся buttonsNumber кнопок в горизонтальном стэклэйауте. Затем я их FillAndExpand. Таким образом получаю несколько строк с различным количеством кнопок, которые красиво расположены по горизонтали. Теперь нужно сделать эти кнопки квадратными. То есть получить их текущую ширину, которая была получена после FillAndExpand и присвоить значение высоте.

Google

Ivan
06.09.2017
09:56:24
ну там ещё у кнопок label'ы тоже прикреплены, но это сейчас не имеет значения, у них, кстати, тоже размеры вечно -1

Roman
06.09.2017
09:56:29
нужно предопределить свою кнопку от стандартной
protected override SizeRequest OnMeasure(double widthConstraint, double heightConstraint)
{
var result = base.OnMeasure(widthConstraint, heightConstraint);
if (!double.IsInfinity(heightConstraint))
{
result.Minimum = result.Request = new Size(heightConstraint, heightConstraint);
}
return result;
}

Max
06.09.2017
09:57:24

Ivan
06.09.2017
09:58:04

Max
06.09.2017
09:58:07

Кита
06.09.2017
09:58:45

Max
06.09.2017
09:58:59

Ivan
06.09.2017
10:00:00

Roman
06.09.2017
10:00:45
да... и соотвесвенно
result.Minimum = result.Request = new Size(widthConstraint, widthConstraint);
если по ширине

Кита
06.09.2017
10:02:02

Ivan
06.09.2017
10:02:23

Max
06.09.2017
10:03:17

Google

Ivan
06.09.2017
10:04:31
ну и накладывать немного серую масочку, как вариант

Max
06.09.2017
10:04:52

Ivan
06.09.2017
10:04:54

Кита
06.09.2017
10:05:05
но опять же перерисовок там будет тьма

Kirill
06.09.2017
10:08:19
Да просто просчитать из кода все размеры и через HeightRequest и WidthRequest задать их, или свой лейаут написать, что еще лучше, тогда не будет рассчетов размеров и перерсовок лишних. С лейаутом можно вообще тогда не запрашивать из системы размер экрана. Туда приходит размеротвезенны лейауту, и уже от него плясать - рассчитывать размеры кнопок и расставлять.

Gleb
06.09.2017
11:06:14
Кто то уже выпускал приложения с UrhoSharp?

Vladimir
06.09.2017
12:14:02
Господа, всем привет. Перевожу PCL проект на .NETStandart. Чтобы не огребать FileNotFoundException (при загрузке либ) перевел в Android-проекте работы с Nuget с package.config на PackageReference. В итоге проект перестал собираться, никак не может отыскать namespace System. Мб кто-то сталкивался, как это порешать?

Kirill
06.09.2017
12:47:34

Vladimir
06.09.2017
12:47:46
да

Kirill
06.09.2017
12:48:11
NETStandard.Library библиотека подключена?

Vladimir
06.09.2017
12:49:22
в Android проект - нет, подключена в кросс-платформенный.
разве нужно подключать, если она не нужна? В этом же и есть цель, отказаться от такого подхода, используя packageReference

Ivan
06.09.2017
13:37:48

Кита
06.09.2017
13:44:10

Kirill
06.09.2017
13:48:55

Кита
06.09.2017
14:19:10
Что мешает написать обертку к констрейнтлэйаутам?

Kirill
06.09.2017
14:22:16

Кита
06.09.2017
14:23:40
Ну хотя да

Kirill
06.09.2017
14:23:49
Плюс надо будет еще и вьюхи обрабатывать, создавать их рендереры из рендерера лейаута..
Проще свой Forms Layout реализовать

Google

Kirill
06.09.2017
14:24:25
Кстати я не встречал еще готовых оберток констреинтов для формс..

Кита
06.09.2017
14:47:14
Кстати я не встречал еще готовых оберток констреинтов для формс..
видимо это только предстоит сделать. но вообще наверное это потому что констрейнт лэйаут на обоих осях это элемент который очень гибок в дизайнере и менее гибок в коде. Проще всегда накидать правила для констрейнтов используя мышку и понятный UI нежели тоже самое “генерить” в код.

Kirill
06.09.2017
14:48:26

Кита
06.09.2017
14:50:01

Kirill
06.09.2017
14:52:48
CompressLayout? впервые слышу
Roadmap видимо не смотришь)
https://forums.xamarin.com/discussion/85747/xamarin-forms-feature-roadmap
Хотя я чть неверно назвал.
Layout Compression
LayoutCompression allows multiple layers of Xamarin.Forms layouts to be packed into a single native one.

Кита
06.09.2017
14:54:33

Ivan
06.09.2017
15:12:45
как у вас заведено таймеры крутить, если работать в мэйн треде? IEnumerator или есть что-то симпатичней?

Max
06.09.2017
15:15:46

Kirill
06.09.2017
15:15:53

Ivan
06.09.2017
15:16:13
И второй вопрос сразу: каким методом могу отловить первую отрисовку UI? То есть main page отрисовалась и мне нужно по текущим данным её элементов внести корректировки (да, всё ещё решаю проблему с размерами -1)

Kirill
06.09.2017
15:16:45

Ivan
06.09.2017
15:16:52

Kirill
06.09.2017
15:17:06

Кита
06.09.2017
15:17:16

Max
06.09.2017
15:17:28

Ivan
06.09.2017
15:17:42

Kirill
06.09.2017
15:18:11

Ivan
06.09.2017
15:18:35
у меня во всех функция OnStart(), App() и OnCreate() размеры всех UI элементов равны -1. Но мне нужно кнопки сделать квадратными, для этого нужно получить текующий width и задать height по нему
а текущий Width == -1

Kirill
06.09.2017
15:18:58
В лейаут приходит его размер, дальше отталкиваясь от этого размера отрисовываешь там все вьюхи проставля им размер и позицию

Google

Kirill
06.09.2017
15:19:39

Ivan
06.09.2017
15:19:47
да, так и делал
но как будет вести себя на разных разрешениях? Где-то скукожится в центре, где-то выйдет за пределы, верно?

Кита
06.09.2017
15:20:20
используй рэлейтив лэйаут

Ivan
06.09.2017
15:20:24
поэтому и стараюсь не отталкиваться от констант

Кита
06.09.2017
15:20:25
ну написали же

Max
06.09.2017
15:20:28

Kirill
06.09.2017
15:20:57

Ivan
06.09.2017
15:21:37
используй рэлейтив лэйаут
окей, попробую изменить свой подход к этой задаче согласно советам. Но всё равно смущает проблема, что при старте приложения не могу получить размеры UI-элементов, вот и хочу докопаться до истины, как же их можно получить

Kirill
06.09.2017
15:21:42

Кита
06.09.2017
15:21:53

Max
06.09.2017
15:21:56

Kirill
06.09.2017
15:22:32

Ivan
06.09.2017
15:22:41

Kirill
06.09.2017
15:23:01

Ivan
06.09.2017
15:23:19
если продолжать добивать StackLayout

Max
06.09.2017
15:24:21
А есть варик как-нибудь ListView развернуть на 90°?)))

Кита
06.09.2017
15:24:24

Kirill
06.09.2017
15:24:25
а вот это вот то, что очень похоже на выход
Но это неправильный подход. В таком случае у тебя сперва отобразится экран с кнопками стандартного размера, потом ты посчитаешь их размер и потом перерисуются уже твоего размера, и они при отображении будут дергаться

Google

Kirill
06.09.2017
15:24:34

Max
06.09.2017
15:24:59
Rotation?
Вопрос в том, насколько это производительно

Kirill
06.09.2017
15:25:19

Кита
06.09.2017
15:25:20

Kirill
06.09.2017
15:25:36

Ivan
06.09.2017
15:27:04

Kirill
06.09.2017
15:27:27
Убедили)

Кита
06.09.2017
15:28:42
@korsour Суть в том что ты должен уметь описывать макет экрана не зная какого он реально будет размера. Он может быть любого. Ты должен уметь задать посредством метаописателей языка xaml разметку и правила растяжения на все возможные экраны. Если тебе нужно заметное изменение положения элементов с течением времени - тебе нужны анимации вьюх. Но узнавать координаты каждого из элементов нужно в очень редких крайних случаях для решения не самых распространенных задач

Ivan
06.09.2017
15:28:42
ахах, вроде того)

Max
06.09.2017
15:31:35

Kirill
06.09.2017
15:36:31

Max
06.09.2017
15:36:52

Ivan
06.09.2017
15:39:16