Как скрыть вкладки Android с помощью специального рендеринга Xamarin Forms?

В Xamarin Forms мне нужно написать пользовательский TabbedPageRenderer, чтобы скрыть панель Android. Однако я не знаю, как это сделать.

[assembly: ExportRenderer(typeof(CTabbedPage), typeof(CTabbedPageRenderer))]
namespace App15.Droid
{
    public class CTabbedPageRenderer : TabbedPageRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<TabbedPage> e)
        {
            base.OnElementChanged(e);

            if (e.NewElement != null)
            {
                (this.Context as Activity).ActionBar.NavigationMode = ActionBarNavigationMode.Standard;
            }
        }
    }
}

Этот код генерирует исключение, поскольку ActionBar имеет значение null. Я использую AppCompat 23.3.0 и XF 2.3.2.118-pre1.

EDIT: Я думаю, что причина ActionBar равна null, а Toolbar заменила его, но я до сих пор не знаю, как скрыть вкладки. Кроме того, меня не интересует толкание страниц по-разному.

Я также попытался добавить android:visibility="gone" в Tabbar.axml. Это успешно скрывает вкладку, но вкладка по-прежнему занимает пространство.

Ответ 2

Вот идеальное решение:

  • Добавить android: visibility = "gone" в Rescouces > layout > Tabbar.axml

например:

<?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.TabLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/sliding_tabs" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?attr/colorPrimary" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" app:tabIndicatorColor="@android:color/white" app:tabGravity="fill" app:tabMode="fixed" android:visibility="gone" />

  1. MainActivity.cs

Строка комментария строки комментариевResource = Resource.Layout.Toolbar;

например:

namespace BottomTab.Droid
{
    [Activity(Label = "BottomTab.Droid", Icon = "@drawable/icon", Theme = "@style/MyTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
    public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
    {
        protected override void OnCreate(Bundle bundle)
        {
            TabLayoutResource = Resource.Layout.Tabbar;
            //ToolbarResource = Resource.Layout.Toolbar;

            base.OnCreate(bundle);

            global::Xamarin.Forms.Forms.Init(this, bundle);

            LoadApplication(new App());
        }
    }
}
  1. Добавить NavigationPage.SetHasNavigationBar(это, false); для каждой страницы в TabbedPage.

например:

public partial class MyPage : ContentPage
{
    public MyPage()
    {
        InitializeComponent();
        NavigationPage.SetHasNavigationBar(this, false);
    }

    private void OnGoToProfile(object sender, EventArgs e)
    {
        Navigation.PushAsync(new ProfilePage());
    }
}