Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xamarin android渲染器:按钮第一次是圆形的,但当按下backbutton时,它变成方形_Xamarin_Xamarin.android_Xamarin.forms_Portable Class Library_Renderer - Fatal编程技术网

Xamarin android渲染器:按钮第一次是圆形的,但当按下backbutton时,它变成方形

Xamarin android渲染器:按钮第一次是圆形的,但当按下backbutton时,它变成方形,xamarin,xamarin.android,xamarin.forms,portable-class-library,renderer,Xamarin,Xamarin.android,Xamarin.forms,Portable Class Library,Renderer,我已经做了一个渲染器来制作Android中的圆形按钮。当您正常进入页面时,它将毫无问题地执行。但是,当您按下backbutton返回到该页面时,该按钮将变为正方形 我的渲染器代码: 公共类FloatingActionButtonRenderer:Xamarin.Forms.Platform.Android.AppCompat.ButtonRenderer { 私有渐变可绘制_正常,_按下; 受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e) {

我已经做了一个渲染器来制作Android中的圆形按钮。当您正常进入页面时,它将毫无问题地执行。但是,当您按下backbutton返回到该页面时,该按钮将变为正方形

我的渲染器代码:

公共类FloatingActionButtonRenderer:Xamarin.Forms.Platform.Android.AppCompat.ButtonRenderer
{
私有渐变可绘制_正常,_按下;
受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
if(控件!=null)
{
var按钮=(FloatingActionButton)e.NewElement;
button.SizeChanged+=OnSizeChanged;
}
}
IzeChanged上的私有void(对象s、事件参数e){
var按钮=(FloatingActionButton)s;
var radius=(float)Math.Min(button.Width,button.Height)*Resources.DisplayMetrics.Density;
//为按钮的正常状态创建一个可绘制的
_normal=新的Android.Graphics.Drawables.GradientDrawable();
if(button.BackgroundColor.R==-1.0&&button.BackgroundColor.G=-1.0&&button.BackgroundColor.B=-1.0)
_normal.SetColor(Android.Graphics.Color.ParseColor(“#ff2c2e2f”);
其他的
_normal.SetColor(button.BackgroundColor.ToAndroid());
_正常。设置转弯半径(半径);
//为按钮的按下状态创建一个可绘制的
_pressed=new Android.Graphics.Drawables.GradientDrawable();
var highlight=Context.getainstyledattributes(新int[]{Android.Resource.Attribute.ColorActivatedHighlight}).GetColor(0,Android.Graphics.Color.Gray);
_按下。设置颜色(高亮显示);
_按下。设置拐角半径(半径);
//将可绘图项添加到状态列表,并将状态列表指定给按钮
var sld=新StateListDrawable();
AddState(新int[]{Android.Resource.Attribute.StatePressed},_pressed);
添加状态(新的int[]{},_normal);
控制.立根点(sld);
button.SizeChanged-=OnSizeChanged;
}
}

因此,我为更改的大小创建了一个处理程序。这两次创建它都没有问题,但它只在您正常进入页面时才进入事件。当您按下backbutton时,它不会进入

浮动操作按钮的屏幕截图:

编辑 一些额外信息: 我忘了提到我覆盖了我的
MasterDetailPage
OnBackButtonPressed
,我这样做是因为当我按下backbutton时它会崩溃:

protectedoverride bool OnBackButtonPressed()
{
Page=GoPrevPage();
if(page.GetType()==typeof(LoginPage))
{
App.Current.MainPage=新登录页面();
}
其他的
{
page.Parent=null;
详细信息=第页;
navigationDrawerList.SelectedItem=selectedMenuItems.LastOrDefault();
}
返回true;
}
GoPrevPage是一个用于静态类的函数:

公共静态类BackButtonHelper
{
公共静态列表页面;
公共静态列表所选菜单项;
静态BackButtonHelper(){
prevPages=新列表();
selectedMenuItems=新列表();
}
公共静态页面GoPrevPage(){
prevPages.RemoveAt(prevPages.Count-1);
selectedMenuItems.RemoveAt(selectedMenuItems.Count-1);
返回prevPages[prevPages.Count-1];
}
公共静态无效AddPageToPrev(第页,主页项主页项)
{
如果(!IsToegevoegd(第ClassId页))
{
前页。添加(第页);
selectedMenuItems.Add(masterPageItem);
}
}
私有静态bool IsToegevoegd(字符串标题){
返回prevPages.Last().ClassId==标题;
}
}
这是当您单击操作按钮时发生的操作(导航:

private void insertTaak_单击(对象发送方,事件参数e)
{
var navPage=new DetailTaak(“0”){Title=“Taak toevoegen”};
var app=应用程序。当前为应用程序;
var mainPage=(MenuPage)app.mainPage;
mainPage.Detail=新导航页面栏(导航页面);
}

我说,忘记大小更改事件,直接尝试更新

公共类FloatingActionButtonRenderer:Xamarin.Forms.Platform.Android.AppCompat.ButtonRenderer
{
私有渐变可绘制_正常,_按下;
受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
if(控件!=null)
{
var按钮=(FloatingActionButton)e.NewElement;
此.UpdateStyle(按钮);
}
}
受保护的覆盖无效OneElementPropertyChanged(对象发送方,System.ComponentModel.PropertyChangedEventArgs e)
{
如果(e.PropertyName==FloatingActionButton.HeightProperty.PropertyName||
e、 PropertyName==FloatingActionButton.WidthProperty.PropertyName)
{
var按钮=(FloatingActionButton)发送器;
更新样式(按钮);
}
其他的
{
base.OnElementPropertyChanged(发送方,e);
}
}
私有void更新样式(FloatingActionButton)
{
尝试
{
var radius=(float)Math.Min(button.Width,button.Height)*Resources.DisplayMetrics.Density;
//为按钮的正常状态创建一个可绘制的
_normal=新的Android.Graphics.Drawables.GradientDrawable();
if(button.BackgroundColor.R==-1.0&&button.BackgroundColor.G=-1.0&&button.BackgroundColor.B=-1.0)
_normal.SetColor(Android.Graphics.Color.ParseColor(“#ff2c2e2f”);
其他的
_normal.SetColor(button.BackgroundColor.ToAndroid());
_正常。设置转弯半径(半径);
//为按钮的按下状态创建一个可绘制的
_按下=新