我创建了一个Xamarin Forms项目,我无法将我的Android状态栏颜色更改为透明。我在MainActivity的OnCreate()方法中以编程方式更改颜色,如下所示:
if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop)
{
Window.ClearFlags(WindowManagerFlags.TranslucentStatus);
Window.AddFlags(WindowManagerFlags.DrawsSystemBarBackgrounds);
Window.SetStatusBarColor(Color.Transparent);
}
我尝试了不同的颜色,它的工作正常,但是"透明"根本不工作。我正在测试API 22。
我的style.xml如下:
<style name="MainTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="colorPrimary">@color/blue</item>
<item name="colorPrimaryDark">@color/blue</item>
<item name="colorAccent">#FF4081</item>
<item name="windowActionModeOverlay">true</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
如果我以编程方式将我的颜色设置为紫色,例如它可以正常工作,但如果我将其设置为透明,我将得到我的style.xml颜色,它是蓝色的。如果我删除了我的style.xml ColorPrimaryDark颜色,我会得到一个灰色状态栏。可能是什么解决方案?
答案 0 :(得分:4)
你试过这个吗?
<item name="android:windowTranslucentStatus">true</item>
答案 1 :(得分:1)
您可以尝试将其添加到styles.xml(Android proj)
<style name="MainTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:windowTranslucentStatus">true</item>
</style>
看起来像这样:-
答案 2 :(得分:0)
使用下面提到的代码。这对我来说非常有用。
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
protected override void OnCreate(Bundle bundle)
{
TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;
base.OnCreate(bundle);
global::Xamarin.Forms.Forms.Init(this, bundle);
if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop)
{
Window.DecorView.SystemUiVisibility = 0;
var statusBarHeightInfo = typeof(FormsAppCompatActivity).GetField("_statusBarHeight", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
statusBarHeightInfo.SetValue(this, 0);
Window.SetStatusBarColor(new Android.Graphics.Color(18, 52, 86, 255));
}
LoadApplication(new App());
}
}
答案 3 :(得分:0)
要实现此目的,请将该代码放在Xamarin.Android项目LoadApplication(new App())
类的OnCreate()
方法的MainActivity
之前。
private void TransparentStatusBar()
{
if (Build.VERSION.SdkInt >= BuildVersionCodes.Kitkat)
{
// for covering the full screen in android..
Window.SetFlags(WindowManagerFlags.LayoutNoLimits, WindowManagerFlags.LayoutNoLimits);
// clear FLAG_TRANSLUCENT_STATUS flag:
Window.ClearFlags(WindowManagerFlags.TranslucentStatus);
// add FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS flag to the window
Window.AddFlags(WindowManagerFlags.DrawsSystemBarBackgrounds);
Window.DecorView.SystemUiVisibility = 0;
Window.SetStatusBarColor(Android.Graphics.Color.Transparent);
}
}