Я взял источник я нашел здесь: https://github.com/xamarin/Xamarin.Forms/blob/master/Xamarin.Forms.Platform.Android/Renderers/MasterDetailRenderer.csXamarin Android Пользовательские MasterDetailPage не вызывая OnLayout когда страница толкнул подробно страницу, с которой NavigaionPage
И создал пользовательский визуализатор в Xamarin Forms Android проекта. Я получил проект для сборки и меню, чтобы открыть/закрыть, как ожидалось, а также отобразить начальную страницу подробностей.
Эта страница представляет собой «NavigaionPage» в Xamarin.Forms, который на самом деле представляет собой просто ViewGroup с кучей кода, чтобы заставить его работать с функциями Push/Pop.
Когда я нажимаю новую страницу, которая имеет собственный рендерер и родной RelativeLayout в качестве подзаголовка, страница становится пустой до тех пор, пока я не поверну
После некоторых исследований в коде я понял, что OnMeasure и OnLayout не вызывались на странице, которая была нажата на страницу NavigationPage/detail (размер задвинутой страницы застрял в 0x0 до изменения ориентации).
я создал еще один пользовательский визуализатор, но на этот раз для NavigationPage, который выглядит следующим образом:
public class MasterDetailContentNavigationPageRenderer : NavigationPageRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<NavigationPage> e)
{
base.OnElementChanged(e);
if(e.OldElement != null)
{
e.OldElement.Pushed -= handleOnPushed;
}
if(e.NewElement != null)
{
e.NewElement.Pushed += handleOnPushed;
}
}
private void handleOnPushed(object sender, EventArgs e)
{
var w = MeasureSpec.MakeMeasureSpec(MeasuredWidth, MeasureSpecMode.Exactly);
var h = MeasureSpec.MakeMeasureSpec(MeasuredHeight, MeasureSpecMode.Exactly);
Measure(w, h);
Layout(Left, Top, Right, Bottom);
}
}
Этот обычай визуализатор для страницы подробнее/NavigaionPage работал на 2 из 3-х моих подтолкнули Страницы.
Основная/самая важная страница не полностью добавила все элементы пользовательского интерфейса.
Страница, которая была нажата и отсутствует, имеет пользовательский интерфейс. Ниже приведен список того, как отображается страница:
--- SongViewerLayout: RelativeLayout
------ RelativeLayout
--------- ViewerTopBar (рисует все кнопки, за исключением одного)
--------- DocumentView (пустое белое пятно между верхней панелью и пагинацией)
--------- ViewerPagination (рисует цвет фона, но не кнопки страницы)
Если я изменяю ориентацию, в верхней панели отображается отсутствующая кнопка, отображаются номера страниц, а вид документа выглядит как ничья, но он выключен.
Если я вернусь к использованию Xamarin.Forms, предоставленный MasterDetailPage, пользовательский интерфейс загружается, как и ожидалось.
Я изучил код в репозитории Xamarin.Forms, но ничто из этого не применимо к внутренней работе добавленных элементов. Другими словами, страница с деталями (которая в моем случае является NavigationPage) добавляется в SetElement (...), и некоторые обработчики назначаются ... но я ничего не могу сказать, что ищет страницы, которые нажимаются, а затем реагируют. Я бы предположил/ожидал, что NavigationPage будет работать так, как ожидалось, теперь, когда он будет рассмотрен в MasterDetailPage/DrawerLayout.
Примечание: взгляды, которые, как представляется, имеют наибольшее количество проблем, программно добавляются и даются «LayoutParamaters». Представления, найденные в AXML, похоже, просто появляются.
Есть ли что-то, что мне не хватает, чтобы «инициализировать» макет в Android?Я сделал собственные приложения на Android и не должен был делать ничего особенного.
Почему пользовательский интерфейс над навигационной страницей заставляет NavigationPage не выполнять стандартную инициализацию?
Что мне не хватает ???
Edit:
Я создал рабочий пример этого вопроса на моем GitHub счет, который вы можете клонировать здесь: https://github.com/XamarinMonkey/CustomMasterDetail
Построить и запустить CustomMasterDetail.Droid (Обратите внимание на интерфейс является MasterDetailPage)
Кресло любого предмета
Нижняя синяя полоса не имеет номеров страниц.
Повернуть ориентацию отображения номеров страниц.
Остановить Билд
закомментировать весь класс "MainMasterDetailPageRenderer.cs"
Rebuild/запустить приложение
Нажмите любой элемент
номера страниц приведены сразу же, как и ожидалось, только потому, что теперь использует стандартный файл MasterDetailPage!
Дайте предложения, пожалуйста!
Edit # 2:
Благодаря некоторой обратной связи, это, кажется, не является проблемой в 6.0 устройств. Мое тестовое устройство - «Samsung Galaxy Tab Pro» с v5.1.1. И, к сожалению, мне нужно это приложение, чтобы вернуться к 4!
Edit # 3:
вопрос должен быть добавив вид программно в Android 5.1.1 нативного RelativeLayout (который проталкивается к странице детали NavigationPage) после того, как он раздувается в Xamarin.Forms. Кажется, что вызов метода/макета вручную решает проблему. Но мне нужно более автоматическое решение.
Ссылка является исходным кодом форм xamarin. Можете ли вы показать рендеринг MasterDetialPage в своем коде? –
Смотрите мои правки, у меня есть рабочий пример на GitHub –
У меня есть тестовый код на моем устройстве Android. Он работает и может показывать номер страницы без комментариев из 'MainMasterDetailPageRenderer'. –