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: p> Xamarin Forms version 2.1
MVVMCROSS version 4.1 p> p>
3 Réponses :
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, 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 p> p>
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.
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); } } }
Delaite réponse est correct et résolvez mon problème ici, mais le Maintenant, la meilleure approche utilise xamarin.forms.forms.Context code> est obsolète depuis la version 2.5 de Xamarin 2.5.
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);
}
}
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?