![](/img/trans.png)
[英]Xamarin.Forms: How to change FontFamily of tabs in TabbedPage?
[英]How can I place a button in the the tabs of a TabbedPage in Xamarin.Forms?
我在我的Xamarin.Forms应用程序中使用了选项卡式页面和主详细信息页面相结合的导航。 当前,当从“母版详细信息页面”中选择菜单选项时,将添加一个新的选项卡式页面,其中包含页面的内容。 我想放置一个按钮以关闭选项卡的标题字段中的选项卡。 这可能吗? 目前,我仅在内容页面的选项卡中有一个按钮,但这并不理想。 我希望它非常像网络浏览器。 提前致谢!
编辑:我已经添加了图像 。 基本上,我只想在选项卡栏中每个项目的右侧添加一个“ X”按钮,即可关闭该选项卡。 就像您在Chrome浏览器中一样。
您可以使用自定义渲染器在android平台中创建自定义TabbedPage
。 与Yuri不同,在android上我们可以向tab添加图像,实际上我们可以自定义tab的布局。
由于在您的图像中,我看到您没有为每个选项卡使用Icon
属性,因此我将此图标用作关闭按钮。 但请确保您也不能使用此功能,它是自定义的。
在PCL中,创建一个MyTabbedPage
:
public class MyTabbedPage : TabbedPage
{
}
在Android平台中为其创建渲染器:
[assembly: ExportRenderer(typeof(MyTabbedPage), typeof(MyTabbedPageRenderer))]
namespace YOURNAMESPACE.Droid
{
public class MyTabbedPageRenderer : TabbedPageRenderer
{
private ObservableCollection<Xamarin.Forms.Element> children;
private IPageController controller;
protected override void SetTabIcon(TabLayout.Tab tab, FileImageSource icon)
{
base.SetTabIcon(tab, icon);
tab.SetCustomView(Resource.Layout.mytablayout);
var imagebtn = tab.CustomView.FindViewById<ImageButton>(Resource.Id.closebtn);
imagebtn.SetBackgroundDrawable(tab.Icon);
var title = tab.CustomView.FindViewById<TextView>(Resource.Id.tabtitle);
title.Text = tab.Text;
imagebtn.Click += (sender, e) =>
{
var closebtn = sender as ImageButton;
var parent = closebtn.Parent as Android.Widget.RelativeLayout;
var closingtitle = parent.FindViewById<TextView>(Resource.Id.tabtitle);
foreach (var child in children)
{
var page = child as ContentPage;
if (page.Title == closingtitle.Text)
{
children.Remove(child);
break;
}
}
};
}
protected override void OnElementChanged(ElementChangedEventArgs<TabbedPage> e)
{
base.OnElementChanged(e);
if (e.NewElement != null)
{
controller = Element as IPageController;
children = controller.InternalChildren;
}
}
}
}
像这样使用它:
<local:MyTabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:TabbedPageForms"
x:Class="TabbedPageForms.MainPage">
<local:TodayPage Title="Today" Icon="hamburger.jpg" />
<local:SchedulePage Title="Schedule" Icon="hamburger.jpg" />
</local:MyTabbedPage>
后面的代码,不要忘记更改MainPage
以从MyTabbedPage
继承:
public partial class MainPage : MyTabbedPage
{
public MainPage()
{
InitializeComponent();
}
}
请注意这里 ,如果您靠近我的代码,会发现我使用每个选项卡的Title
来比较和删除匹配项,它将找到第一个匹配的标题并删除该标题的页面。 如果您有多个标题相同的选项卡,则可能会导致问题。 这是该演示的潜在错误,您可以尝试解决。
更新:
忘记发布mytablayout
的代码了,就是这样:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView android:id="@+id/tabtitle"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_centerInParent="true"
android:gravity="center_horizontal" />
<ImageButton
android:id="@+id/closebtn"
android:layout_height="30dp"
android:layout_width="30dp"
android:scaleType="fitCenter"
android:layout_alignParentRight="true"
android:gravity="center" />
</RelativeLayout>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.