c# - 如何更改原始选项卡式页面栏的样式(带有 xamarin.forms 的 android)?
问题描述
早上好,我正在 xamarin.forms 中设计我的第一个应用程序,但我遇到了一个问题,那就是 android 中标签页栏的样式。在 iOS 上它工作得很好,但在 Android 上它有不同的显示,但我想让两个操作系统上的同质的东西知道怎么做?
屏幕 Android https://ibb.co/cYRLvc4 屏幕 iOS https://ibb.co/ysnxBr8
解决方案
您应该使用自定义效果,首先将您的 android 目标更新为 9.0(并支持库),然后在您的表单解决方案中创建路由效果:
使用 Xamarin.Forms;
namespace YourApp
{
public class NoShiftEffect : RoutingEffect
{
public NoShiftEffect() : base("MyEffect.NoShiftEffect")
{
}
}
}
然后,在 Android 中,创建一个自定义渲染器:
using Android.Support.Design.BottomNavigation;
using Android.Support.Design.Widget;
using Android.Views;
using yournamespace.Droid;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;
[assembly:ResolutionGroupName ("MyEffect")]
[assembly:ExportEffect (typeof(NoShiftEffect), "NoShiftEffect")]
namespace yournamespace.Droid
{
public class NoShiftEffect : PlatformEffect
{
protected override void OnAttached ()
{
if (!(Container.GetChildAt(0) is ViewGroup layout))
return;
if (!(layout.GetChildAt(1) is BottomNavigationView bottomNavigationView))
return;
// This is what we set to adjust if the shifting happens
bottomNavigationView.LabelVisibilityMode = LabelVisibilityMode.LabelVisibilityLabeled;
}
protected override void OnDetached ()
{
}
}
}
最后,在您的 tabbde 页面中:
<TabbedPage.Effects>
<local:NoShiftEffect />
</TabbedPage.Effects>
推荐阅读
- r - 将矩阵乘以包含在不同维度的第二个矩阵中的参考值
- gatsby - 防止时区影响
- sql - 如何在查询中转义几个 with?
- benchmarking - 如何告诉 Google Benchmark 不对某行代码进行基准测试?
- c++ - 使用 clang++ 在 macOS Catalina 上编译头文件和 cpp 文件的问题
- swiftui - SwiftUI - 协议类型“任何”的值不能符合“视图”
- arrays - Pyspark 数组列 - 用默认值替换空元素
- webstorm - 如何在WebStorm的终端中将光标移动到行首和行尾?
- laravel - Laravel 雄辩的 foreach
- node.js - 运行我的应用程序时如何解决此错误