10
votes

La couleur de contour du cadre n'est pas affichée dans Xamarin Forms Projet Android à l'aide de MVVMcross

Actuellement, je travaille sur un projet Android Forms Xamarin en utilisant MVVMcross. J'ai un problème étrange concernant le cadre. Chaque fois que je fixe la messagerie OUTINECOLOR, elle ne s'affiche que dans iOS et non dans Android. J'ai essayé avec des projets différents formes de Xamarin et il est affiché par les deux plates-formes sans aucun problème. Je n'ai aucune indication pourquoi cela se passe. Mvvmcross pourrait-il en quelque sorte liée avec le problème?

Voici un échantillon: xxx

page android

 page iOS

Xamarin Forms version 2.1 MVVMCROSS version 4.1


2 commentaires

Pourriez-vous ajouter les éléments importants de votre code XAML ou d'UI et une capture d'écran d'IOS et d'Android? Cela pourrait aider.


Même problème de mon côté! tout travail autour pour cela?


3 Réponses :


8
votes

Même j'ai eu le même problème, pour résoudre ce problème, j'ai ajouté un rendu personnalisé pour le contrôle de la trame. Dans Framerender, il faut remplacer la méthode de la méthode et la méthode privée Drawoutline comme suit, xxx

et dans une autre approche, vous pouvez également envisager d'utiliser le sélecteur Android XML du coin arrondi comme ressource de fond. Pour plus de détails sur ce chèque, mon article de blog: http: //www.appliedcodelog. Com / 2016/11 / xamarin-formulaire-image-contour-color_21.html


3 commentaires

2ème option est une alternative juste? Vous créez un contrôle personnalisé hors cadre. Ce n'est pas très clair pour moi.


Créez un contrôle personnalisé pour le cadre et définissez la ressource de fond XML avec bordure plus sombre.


La deuxième alternative mentionnée dans le blog a fonctionné pour moi.



-1
votes

myCustomRenderer, vous voir;)

using Xamarin.Forms.Platform.Android;
using Android.Graphics;
using Android.Graphics.Drawables;

[assembly: ExportRenderer(typeof(Frame), typeof(YourProject.Droid.Renderers.BorderFrameRenderer))]
namespace YourProject.Droid.Renderers
{
public class BorderFrameRenderer : FrameRenderer
{
    public override void Draw(Canvas canvas)
    {
        base.Draw(canvas);
        using (var strokePaint = new Paint())
     using (var rect = new RectF(0, 0, canvas.Width, canvas.Height))
     {

          // stroke
         strokePaint.SetStyle(Paint.Style.Stroke);
          strokePaint.Color = Element.OutlineColor.ToAndroid();
         strokePaint.StrokeWidth = 5;

           canvas.DrawRoundRect(rect, Element.CornerRadius * 2, Element.CornerRadius * 2, strokePaint);  // stroke
        }
    }

 public BorderFrameRenderer(Context context) : base(context)
    {
    }

 protected override void OnElementChanged(ElementChangedEventArgs<Frame> e)
    {
        base.OnElementChanged(e);
    }
  }
}


0 commentaires

1
votes

Delaite réponse est correct et résolvez mon problème ici, mais le xamarin.forms.forms.Context code> est obsolète depuis la version 2.5 de Xamarin 2.5.

Maintenant, la meilleure approche utilise android.app.application.context code> C'est donc ce que le code doit être maintenant. P>

    public override void Draw(Canvas canvas)
    {
        base.Draw(canvas);
        DrawOutline(canvas, canvas.Width, canvas.Height, 4f);//set corner radius
    }

    void DrawOutline(Canvas canvas, int width, int height, float cornerRadius)
    {
        using (var paint = new Paint { AntiAlias = true })
        using (var path = new Path())
        using (Path.Direction direction = Path.Direction.Cw)
        using (Paint.Style style = Paint.Style.Stroke)
        using (var rect = new RectF(0, 0, width, height))
        {
            float rx = Android.App.Application.Context.ToPixels(cornerRadius);
            float ry = Android.App.Application.Context.ToPixels(cornerRadius);
            path.AddRoundRect(rect, rx, ry, direction);

            paint.StrokeWidth = 2f;  //set outline stroke
            paint.SetStyle(style);
            paint.Color = Android.Graphics.Color.ParseColor("#FFFFFF");//set outline color //_frame.OutlineColor.ToAndroid(); 
            canvas.DrawPath(path, paint);
        }
    }


0 commentaires