Нижние вкладки для Xamarin.Android (в приложении Xamarin.forms)

tabs xamarin.android xamarin.forms

10857 просмотра

2 ответа

1204 Репутация автора

Я делаю приложение с использованием Xamarin.forms.

Вы все знаете, что обычные вкладки для Android от Xamarin.forms 'TabbedPage находится вверху. Потому что это должно быть там, если это родное приложение для Android, которое уважает Android UX.

Но сейчас все изменилось. Даже Google объявил о новой нижней вкладке под названием «Нижняя навигация». https://github.com/roughike/BottomBar Многие крупные приложения используют нижнюю панель вкладок.

Но я не могу использовать новую навигацию снизу. Потому что мое приложение основано на Xamarin.forms и использует TabbedPage из форм. Это будет сложнее, если я попытаюсь использовать нижнюю навигацию.

(Я тоже делаю iOS-приложение из форм)

Так что лучшим подходом будет перемещение родных вкладок вниз.

Итак, я нашел это. (может быть старый) http://envyandroid.com/align-tabhost-at-bottom/

Но не знаю, как использовать в Xamarin.Android. Не могли бы вы помочь мне?

Автор: Bright Lee Источник Размещён: 18.07.2016 09:40

Ответы (2)


11 плюса

161 Репутация автора

Испытал ту же проблему, пытался создать пользовательский TabbedPageRenderer из кода, представленного на GitHub, но не повезло из-за нескольких классов и интерфейсов, определенных как внутренние. Нашел решение, хотя и хакерское, но в нашем случае работает нормально.

Просто создайте новый BottomTabbedPage, унаследованный от TabbedPage, чтобы вы могли связать новый Renderer для Android, а затем создать новый Renderer следующим образом:

[assembly: ExportRenderer(typeof(BottomTabbedPage), typeof(BottomTabbedPageRenderer))]
namespace My.XForms.Droid.Renderers
{
    public class BottomTabbedPageRenderer : TabbedPageRenderer
    {
        protected override void OnLayout(bool changed, int l, int t, int r, int b)
        {
            InvertLayoutThroughScale();

            base.OnLayout(changed, l, t, r, b);
        }

        private void InvertLayoutThroughScale()
        {
            ViewGroup.ScaleY = -1;

            TabLayout tabLayout = null;
            ViewPager viewPager = null;

            for (int i = 0; i < ChildCount; ++i)
            {
                Android.Views.View view = (Android.Views.View)GetChildAt(i);
                if (view is TabLayout) tabLayout = (TabLayout)view;
                else if (view is ViewPager) viewPager = (ViewPager)view;
            }

            tabLayout.ScaleY = viewPager.ScaleY = -1;
            viewPager.SetPadding(0, -tabLayout.MeasuredHeight, 0, 0);
        }
    }
}

Простое масштабирование макета страницы и последующее масштабирование дочерних элементов не делает трюк, потому что оригинальный TabbedPageRenderer заставляет ViewPager не перекрываться с TabLayout, так что ваши содержащиеся страницы будут отображаться с начальным промежутком, поэтому вставка отрицательного заполнения исправляет это.

Не идеальное решение, просто работает, но по крайней мере вы не проходите через полную реализацию TabbedPage.

Автор: Pablo López Martínez Размещён: 25.07.2016 07:55

7 плюса

315 Репутация автора

Используйте пакет BottomNavigationBarXF NuGet для форм Xamarin.
Результат:
введите описание изображения здесь

Автор: Polyariz Размещён: 09.12.2016 09:07
Вопросы из категории :
32x32