【发布时间】:2018-04-18 16:23:12
【问题描述】:
我使用 Xamarin.Forms 创建了一个基本示例应用程序,我尝试在其中复制 Twitter 或 Instagram 等 UI:
- 一个 MasterDetail 页面作为主页,其中默认的“汉堡包”图标 替换为自定义图标
- “底部”TabbedPage 作为 MasterDetail 页面的详细信息
- 允许在 TabbedPage 中实现 top Tabs 的控件
- ContentPages 在 NavigationPage 中为每个 TabbedPage 的标签
所以,我的应用的页面架构如下所示:
|-- MasterDetailPage
..|--标签页
....|-- 导航页
......|-- 内容页面
为了实现这一点,我使用了:
- Naxam BottomTabedPage,在 Android 上实现“底部”TabbedPage(如 BottomNavigationView)
- Syncfusion SfTabView 控件实现“顶部”选项卡
- 一个自定义渲染器,用于管理自定义图标作为主级别的“汉堡”图标和子级别的“箭头”图标的使用
这个渲染器看起来像这样:
public class CustomNavigationPageRenderer : MasterDetailPageRenderer
{
protected override void OnLayout(bool changed, int l, int t, int r, int b)
{
base.OnLayout(changed, l, t, r, b);
var toolbar = FindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar);
for (var i = 0; i < toolbar.ChildCount; i++)
{
var imageButton = toolbar.GetChildAt(i) as ImageButton;
var drawerArrow = imageButton?.Drawable as DrawerArrowDrawable;
if (drawerArrow == null)
continue;
bool displayBack = false;
var app = Xamarin.Forms.Application.Current;
//var navPage = ((app.MainPage.Navigation.ModalStack[0] as MasterDetailPage).Detail as NavigationPage);
var detailPage = (app.MainPage as MasterDetailPage).Detail;
if (detailPage.GetType() == typeof(BottomTp.Views.NaxamMainPage))
{
var tabPage = detailPage as BottomTabbedPage;
var curPage = tabPage.CurrentPage;
var navPageLevel = curPage.Navigation.NavigationStack.Count;
if (navPageLevel > 1)
displayBack = true;
}
if (!displayBack)
ChangeIcon(imageButton, Resource.Drawable.icon);
}
}
private void ChangeIcon(ImageButton imageButton, int id)
{
if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.Lollipop)
imageButton.SetImageDrawable(Context.GetDrawable(id));
imageButton.SetImageResource(id);
}
}
这很好用,但是当我“返回”到主页时,还有一个问题:
- 有默认的从箭头到“汉堡”图标的过渡动画
- 此后,“汉堡”图标被我的自定义图标取代
这里有一个简短的动画来说明这个问题:
有没有办法关闭这个动画?我该如何解决这个问题?
【问题讨论】:
标签: android animation xamarin.forms hamburger-menu