我搜索但是我无法找到是否可以从我的便携式代码更改每个平台的StatusBar颜色? (对于av_frame_unref(pFrameYuv);
)
Android, iOS & WinPhone 8.1
答案 0 :(得分:18)
快速回答
只需添加此行
即可MainPage.SetValue(NavigationPage.BarBackgroundColorProperty, Color.Black);
或者,如果您从NavigationPage继承,则可以使用
进行BarBackgroundColor = Color.Black;
详细答案 你有两个选择。让我们看看它们。
选项1
public App()
{
MainPage = new MainPageUser();
//Background color
MainPage.SetValue(NavigationPage.BarBackgroundColorProperty, Color.Black);
//Title color
MainPage.SetValue(NavigationPage.BarTextColorProperty, Color.White);
}
选项2
public App()
{
MainPage = new MainPageUser();
}
public class MainPageUser : NavigationPage
{
public MainPageUser((Page root) : base(root)
{
// Background color
BarBackgroundColor = Color.Black;
//Title color
BarTextColor = Color.White;
}
}
但是你现在可能已经注意到, iOS顶部的状态栏也是黑色 ,你需要在Info.plist文件中进行更改您的ios项目并打开它(右键单击并选择“打开方式”)使用xml编辑器和添加这些代码行
<key>UIStatusBarStyle</key>
<string>UIStatusBarStyleLightContent</string>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
答案 1 :(得分:15)
我相信你最好写一些特定于平台的代码:
适用于Android:
在Droid项目的MainActivity.cs上,紧跟在
之后LoadApplication(new App());
覆盖OnCreate方法的,添加:
Window.SetStatusBarColor(Android.Graphics.Color.Argb(255, 0, 0, 0));
像这样:
protected override void OnCreate(Bundle bundle)
{
TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;
base.OnCreate(bundle);
global::Xamarin.Forms.Forms.Init(this, bundle);
LoadApplication(new App());
Window.SetStatusBarColor(Android.Graphics.Color.Argb(255, 0, 0, 0)); //here
}
答案 2 :(得分:6)
Android的另一个选项:更改文件\Resources\values\styles.xml
(Android项目)中的颜色。
<item name="colorPrimaryDark">#00FF00</item>
答案 3 :(得分:2)
也许我不理解这个问题,但我希望这会有所帮助。
在搜索了一下,试图找出如何更改iPhoneX状态栏颜色(缺口后面的位)之后,我发现它会根据根BackroundColor
属性自动设置自己{ {1}}。
所以在Xaml中它就像这样简单:
ContentPage
我基本上使用其中一个答案中描述的方法:https://stackoverflow.com/a/46199029/960691,但是通过为您提供一个我专注于您的个人问题的代码片段来修改它(至少我认为! )
答案 4 :(得分:1)
在最新版本的Xamarin上,您不再需要粗略的插件,而是可以在Android上执行以下操作:
var androidColor = color.ToAndroid();
Xamarin.Essentials.Platform.CurrentActivity.Window.SetStatusBarColor(androidColor);
因此是Android中完整的依赖示例:
using System;
using Android.OS;
using WikiSpiv.Droid.Extras;
using WikiSpiv.Extras;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;
[assembly: Dependency(typeof(Statusbar))]
namespace WikiSpiv.Droid.Extras
{
public class Statusbar : IStatusBarPlatformSpecific
{
public Statusbar()
{
}
public void SetStatusBarColor(Color color)
{
if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop)
{
var androidColor = color.ToAndroid();
Xamarin.Essentials.Platform.CurrentActivity.Window.SetStatusBarColor(androidColor);
}
}
}
}
表单:
using System;
using Xamarin.Forms;
namespace WikiSpiv.Extras
{
public interface IStatusBarPlatformSpecific
{
public void SetStatusBarColor(Color color);
}
}
它可以这样称呼:
var statusbar = DependencyService.Get<IStatusBarPlatformSpecific>();
statusbar.SetStatusBarColor(Color.Green);
答案 5 :(得分:0)
使用这种方法,您可以在每个页面上更改它。
Application.Current.MainPage.SetValue(NavigationPage.BarBackgroundColorProperty, Color.Black);
答案 6 :(得分:0)
这对我有用。
在App.xaml中
<Color x:Key="navBarRed">#AA0000</Color>
<Color x:Key="navBarBlue">#F4721C</Color>
<Color x:Key="navBarColour">#F4721C</Color>
<Style TargetType="NavigationPage">
<Setter Property="BarBackgroundColor" Value="{DynamicResource navBarColour}"/>
</Style>
然后,当您要更改颜色时:
if (Condition == true)
App.Current.Resources["navBarColour"] = App.Current.Resources["navBarBlue"];
else
App.Current.Resources["navBarColour"] = App.Current.Resources["navBarRed"];
答案 7 :(得分:0)
第一步,在共享类中添加接口
public interface IStatusBarColor
{
void changestatuscolor(string color);
}
第 2 步:在主要活动上注入依赖并实现接口
[assembly: Dependency(typeof(ETCrewReport.Droid.MainActivity))]
public class MainActivity : FormsAppCompatActivity, IStatusBarColor
{
......
...
public static Context context;
protected override void OnCreate(Bundle bundle)
{
}
public void changestatuscolor(string color)
{
try
{
if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop)
{
var c = MainActivity.context as FormsAppCompatActivity;
c?.RunOnUiThread(() => c.Window.SetStatusBarColor(Android.Graphics.Color.ParseColor(color)));
}
}
catch (Exception ex)
{
}
}
步骤 3. 获取 OnAppearing 方法所需的 xaml.cs 文件中的依赖项
protected async override void OnAppearing()
{
try
{
DependencyService.Get<IStatusBarColor>().changestatuscolor(Color.Black.ToHex());
}
catch (Exception ex)
{
throw;
}
}