Estoy usando Xamarin.Formas y tengo un problema para conseguir 2 cosas para trabajar en Android:

  1. Quiero establecer ActionBar a ser transparente, establecer BarBackgroundColor funciona con todos los colores, pero no con el transparente.
  2. Quiero el título de la página a estar centrada, como en iOS.

    MainPage = new NavigationPage(
           new LoginPage(){Title = "Center"}) {BarBackgroundColor = Color.Transparent});

Alguien me puede ayudar con esto?

InformationsquelleAutor Bonobo | 2015-10-20

2 Comentarios

  1. 9

    Recientemente me encuentro con el mismo problema, yo estaba usando MasterDetailPage en Xamarin.Forms y en android no se establece el título de centro.

    Así, obvio ruta era crear una personalizada renderer y override su OnLayout método, y encontrar la Barra de herramientas del TextView y establecer su Gravity a Center, fácil ¿verdad?

    Pero bueno cuando trato de hacer esto myTextView.Gravity = Android.Views.GravityFlags.Center simplemente no funciona. Traté de configuración ForegroundGravity pero ningún efecto.

    Así que finalmente he calculado centro de la posición X y el conjunto de TextView posición X y VOILLA! es ahora en el centro. Aquí está mi solución.

    [assembly: ExportRenderer(typeof(CustomMasterDetailPage), typeof(CustomMasterDetailPageRenderer))]
    namespace myApp.Droid
    {
        public class CustomMasterDetailPageRenderer : 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 (int index = 0; index < toolbar.ChildCount; index++)
                {
                    if (toolbar.GetChildAt(index) is TextView)
                    {
                        var title = toolbar.GetChildAt(index) as TextView;
                        float toolbarCenter = toolbar.MeasuredWidth / 2;
                        float titleCenter = title.MeasuredWidth / 2;
                        title.SetX(toolbarCenter - titleCenter);
                    }
                }
            }
        }
    }
    • Esto funcionó para mí. Pero yo tenía que comprobar toolbar el valor null.
    • También descubrí que el cajón no se abre la mayoría del tiempo hasta que me agregue este reemplazo public override bool OnInterceptTouchEvent(MotionEvent ev) => base.OnInterceptTouchEvent(ev);
  2. 2

    Usted necesita para crear una costumbre renderizador para lograr eso.

    [assembly: ExportRenderer (typeof(NavigationPage), typeof(NavigationPageRenderer))]
    namespace Droid
    {
    
    public class NavigationPageRenderer : NavigationRenderer
    {
    
        protected override void OnElementChanged (ElementChangedEventArgs<NavigationPage> e)
        {
            base.OnElementChanged (e);
    
            ApplyTransparency ();
        }
    
        protected override bool DrawChild (Android.Graphics.Canvas canvas, Android.Views.View child, long drawingTime)
        {
            ApplyTransparency ();
            return base.DrawChild (canvas, child, drawingTime);
        }
    
        void ApplyTransparency ()
        {
            var activity = ((Activity)Context);
            var actionBar = activity.ActionBar;
            actionBar.SetIcon (Resource.Drawable.actionbaricon);
            actionBar.SetBackgroundDrawable (null);
        }
    }
    }

    Para mí sólo funcionaba el uso de ambos OnElementChanged y DrawChild llamar RemoveAppIconFromActionBar de lo contrario, al navegar a otras páginas que mantiene la adición de la barra de división.

    Usted también tendrá que agregar Window.RequestFeature (WindowFeatures.ActionBarOverlay); a la clase MainActivity.

    Si alguien encuentra una mejor manera de hacer esto en lugar de utilizar DrawChild() por favor hágamelo saber.

    Espero que ayude

Dejar respuesta

Please enter your comment!
Please enter your name here