Xamarin Forms Java.Lang.IllegalArgumentException:DrawerLayout 必须使用 MeasureSpec.EXACTLY 进行测量
Xamarin Forms Java.Lang.IllegalArgumentException: DrawerLayout must be measured with MeasureSpec.EXACTLY
我将 Auth0 与 Xamarin Forms PCL 库一起使用。
我有以下 MainPage class :
namespace LoginPattern
{
public class MainPage : MasterDetailPage
{
public MainPage ()
{
Master = new MenuPage ();
Detail = new DetailPage ();
}
}
}
并在申请中关注 class
public App ()
{
Current = this;
Login ();
}
public void ShowMainPage ()
{
MainPage = new MainPage ();
}
public async void Login ()
{
await DependencyService.Get<IAuth0WidgetLogin>().LoginUseAuth0EmbeddedWidget();
App.Current.Properties["IsLoggedIn"] = true;
ShowMainPage ();
}
因此,在登录时,我最初没有加载任何页面,除了 Auth0 登录小部件。成功登录后,我想显示 MasterDetailPage。但是出现以下错误:
Java.Lang.IllegalArgumentException: DrawerLayout 必须用MeasureSpec.EXACTLY来测量。
请告知我是否需要在 NavigationPage 中加载 Widget 以及如何加载。
编辑 17 月 7 日:
public class MenuPage : ContentPage
{
MasterDetailPage master;
TableView tableView;
public MenuPage ()
{
Title = "LoginPattern";
Icon = "slideout.png";
var section = new TableSection () {
new TextCell {Text = "Sessions"},
new TextCell {Text = "Speakers"},
new TextCell {Text = "Favorites"},
new TextCell {Text = "Room Plan"},
new TextCell {Text = "Map"},
};
var root = new TableRoot () {section} ;
tableView = new TableView ()
{
Root = root,
Intent = TableIntent.Menu,
};
var logoutButton = new Button { Text = "Logout" };
logoutButton.Clicked += (sender, e) => {
App.Current.Logout();
};
Content = new StackLayout {
BackgroundColor = Color.Gray,
VerticalOptions = LayoutOptions.FillAndExpand,
Children = {
tableView,
logoutButton
}
};
}
}
public class DetailPage : ContentPage
{
public DetailPage ()
{
BackgroundColor = new Color (0, 0, 1, 0.2);
var text = "Slide > to see the master / menu";
if (Device.OS == TargetPlatform.Android) {
text = @"Click the action bar dots to see the master / menu";
} else if (Device.OS == TargetPlatform.WinPhone) {
text = @"Click button \/ to see the master / menu ";
}
Content = new StackLayout {
HorizontalOptions = LayoutOptions.Center,
Padding = new Thickness (10, 40, 10, 10),
Children = {
new Label { Text = text }
}
};
}
}
我会尝试做两件事:
- 在尝试显示身份验证小部件之前,将应用程序的 MainPage 设置为空白页(或类似初始页的内容)。
- 在您的 MenuPage 上设置明确的宽度要求。
仅供参考,以下是我的最终解决方案:
public class MainPage : MasterDetailPage
{
public MainPage ()
{
Master = new MenuPage (this);
Detail = new DetailPage ();
ShowLoginDialog ();
}
async void ShowLoginDialog()
{
var page = new LoginPage();
await Navigation.PushModalAsync(page);
App.Current.Login ();
await Navigation.PopModalAsync();
}
}
PS: LoginPage 只是一个空的 ContentPage。
我将 Auth0 与 Xamarin Forms PCL 库一起使用。 我有以下 MainPage class :
namespace LoginPattern
{
public class MainPage : MasterDetailPage
{
public MainPage ()
{
Master = new MenuPage ();
Detail = new DetailPage ();
}
}
}
并在申请中关注 class
public App ()
{
Current = this;
Login ();
}
public void ShowMainPage ()
{
MainPage = new MainPage ();
}
public async void Login ()
{
await DependencyService.Get<IAuth0WidgetLogin>().LoginUseAuth0EmbeddedWidget();
App.Current.Properties["IsLoggedIn"] = true;
ShowMainPage ();
}
因此,在登录时,我最初没有加载任何页面,除了 Auth0 登录小部件。成功登录后,我想显示 MasterDetailPage。但是出现以下错误: Java.Lang.IllegalArgumentException: DrawerLayout 必须用MeasureSpec.EXACTLY来测量。
请告知我是否需要在 NavigationPage 中加载 Widget 以及如何加载。
编辑 17 月 7 日:
public class MenuPage : ContentPage
{
MasterDetailPage master;
TableView tableView;
public MenuPage ()
{
Title = "LoginPattern";
Icon = "slideout.png";
var section = new TableSection () {
new TextCell {Text = "Sessions"},
new TextCell {Text = "Speakers"},
new TextCell {Text = "Favorites"},
new TextCell {Text = "Room Plan"},
new TextCell {Text = "Map"},
};
var root = new TableRoot () {section} ;
tableView = new TableView ()
{
Root = root,
Intent = TableIntent.Menu,
};
var logoutButton = new Button { Text = "Logout" };
logoutButton.Clicked += (sender, e) => {
App.Current.Logout();
};
Content = new StackLayout {
BackgroundColor = Color.Gray,
VerticalOptions = LayoutOptions.FillAndExpand,
Children = {
tableView,
logoutButton
}
};
}
}
public class DetailPage : ContentPage
{
public DetailPage ()
{
BackgroundColor = new Color (0, 0, 1, 0.2);
var text = "Slide > to see the master / menu";
if (Device.OS == TargetPlatform.Android) {
text = @"Click the action bar dots to see the master / menu";
} else if (Device.OS == TargetPlatform.WinPhone) {
text = @"Click button \/ to see the master / menu ";
}
Content = new StackLayout {
HorizontalOptions = LayoutOptions.Center,
Padding = new Thickness (10, 40, 10, 10),
Children = {
new Label { Text = text }
}
};
}
}
我会尝试做两件事:
- 在尝试显示身份验证小部件之前,将应用程序的 MainPage 设置为空白页(或类似初始页的内容)。
- 在您的 MenuPage 上设置明确的宽度要求。
仅供参考,以下是我的最终解决方案:
public class MainPage : MasterDetailPage
{
public MainPage ()
{
Master = new MenuPage (this);
Detail = new DetailPage ();
ShowLoginDialog ();
}
async void ShowLoginDialog()
{
var page = new LoginPage();
await Navigation.PushModalAsync(page);
App.Current.Login ();
await Navigation.PopModalAsync();
}
}
PS: LoginPage 只是一个空的 ContentPage。