我把我发现这里的源详细信息页面: https://github.com/xamarin/Xamarin.Forms/blob/master/Xamarin.Forms.Platform.Android/Renderers/MasterDetailRenderer.csXamarin的Android定制MasterDetailPage不是要求OnLayout当页面推到这是NavigaionPage
开创了一个Xamarin自定义窗体渲染的Android项目。我得到了要建立的项目以及按预期打开/关闭菜单以及显示起始详细信息页面。
详细页面是Xamarin.Forms中的“NavigaionPage”,它实际上只是一个包含一堆代码的ViewGroup,以使其能够使用Push/Pop功能。
当我推新页面,一个具有自定义渲染器和本地RelativeLayout作为子视图的页面时,页面显示为空白,直到我旋转方向。
经过对代码的一些研究,我意识到OnMeasure和OnLayout都没有在被推送到NavigationPage /详细信息页面的页面中被调用(推送页面的尺寸被锁定在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。
主要/最重要的页面没有完全添加所有UI元素。
推送并丢失UI的页面有一些UI。以下是如何在页面显示的列表:
--- SongViewerLayout:RelativeLayout的
------ RelativeLayout的
--------- ViewerTopBar(把一切除了一个按钮)
---------顶杆和分页)之间DocumentView(空白白点
--------- ViewerPagination(绘制背景颜色但不页面按钮)
如果我改变方向,失去的按钮出现在顶部栏中,页码显示出来,文档视图的绘制类型,但它是关闭的。
如果我回到使用Xamarin.Forms提供的MasterDetailPage,UI只是按预期加载。
我已经研究了Xamarin.Forms回购中的代码,但没有一个真正适用于添加的元素的内部运作。换句话说,详细信息页面(在我的情况下是一个NavigationPage)被添加到SetElement(...)并分配了一些处理程序......但没有任何我可以告诉的是页面被推送然后响应。我会假设/期望NavigationPage只是按预期工作,现在它是MasterDetailPage/DrawerLayout的子视图。
注意:似乎有最多问题的意见被添加编程和给予“LayoutParamaters”。在AXML中发现的观点似乎只是出现。
有什么我失踪“初始化”在Android的布局?我在Android中制作了原生应用程序,而不必做任何特殊的事情。
为什么NavigationPage上方的UI会导致NavigationPage不能执行标准初始化?
我失踪了什么?
编辑:
我创建了我的GitHub上的帐户,你可以在这里克隆这一问题的工作示例: https://github.com/XamarinMonkey/CustomMasterDetail
生成并运行CustomMasterDetail.Droid(请注意UI是一个MasterDetailPage)
点击任意项目
底部的蓝色条没有页码。
旋转方向页码显示。
停止构建
注释出整个类 “MainMasterDetailPageRenderer.cs”
重构/运行应用程序
轻按
页号码的显示的任何项目因为它现在正在使用默认的MasterDetailPage!
请给出建议!
编辑#2:
感谢一些反馈,它似乎并不成为一个问题6.0设备。我的测试设备是v5.1.1的“三星Galaxy Tab Pro”。不幸的是,我需要这个应用程序回到4!
编辑#3:
问题必须被Android中5.1.1编程添加视图于天然的RelativeLayout(其推送到NavigationPage细节页)它是在Xamarin.Forms充气之后。手动调用度量/布局似乎可以解决问题。但我需要一个更自动化的解决方案。
该链接是xamarin表单的源代码。你能在你的代码中显示MasterDetialPage渲染吗? –
查看我的编辑,我在GitHub上有一个工作示例 –
我已经在我的android 6.0设备中测试了您的代码。它可以工作,并且可以显示页面编号,而不需要注释'MainMasterDetailPageRenderer'。 –