如何使用 Xamarin 渐变填充系统状态栏
Posted
技术标签:
【中文标题】如何使用 Xamarin 渐变填充系统状态栏【英文标题】:How to Gradient Fill the System Status Bar using Xamarin 【发布时间】:2019-06-05 14:53:24 【问题描述】:我有一个 Xamarin 应用程序,其主页看起来像
这看起来不错(仅处理 android)。但我想要的是系统工具栏(显示接收、电池等的栏)与ToolBar
具有相同的颜色和相同的渐变。所以看起来像
我在Android项目中有CustomPageRenderer
的以下代码
[程序集:ExportRenderer(typeof(ContentPage), typeof(CustomPageRenderer))] 命名空间 Prox.Droid.Renderers 公共类 CustomPageRenderer : PageRenderer 公共CustomPageRenderer(上下文上下文):基础(上下文)
protected override void OnElementChanged(ElementChangedEventArgs<Page> e)
base.OnElementChanged(e);
var toolbar = MainActivity.RootFindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar);
if (toolbar == null)
return;
// Default theme colors come from the shared project.
DefaultTheme defaultTheme = new DefaultTheme();
toolbar.SetBackground(new GradientDrawable(GradientDrawable.Orientation.RightLeft,
new int[] defaultTheme.ThemeLightColor.ToAndroid(), defaultTheme.ThemeDarkColor.ToAndroid() ));
我的styles.xml
看起来像
<?xml version="1.0" encoding="utf-8" ?>
<resources>
<style name="MainTheme" parent="MainTheme.Base"></style>
<!-- Base theme applied no matter what API -->
<style name="MainTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="colorPrimary">#17AEC6</item>
<!-- colorPrimaryDark is used for the status bar -->
<item name="colorPrimaryDark">#009FB6</item>
<!-- colorAccent is used as the default value for colorControlActivated which is used to tint widgets -->
<item name="colorAccent">#93CD8B</item>
<!-- You can also set colorControlNormal, colorControlActivated colorControlHighlight and colorSwitchThumbNormal. -->
<item name="windowActionModeOverlay">true</item>
<item name="android:datePickerDialogTheme">@style/AppCompatDialogStyle</item>
</style>
<style name="AppCompatDialogStyle" parent="Theme.AppCompat.Light.Dialog">
<item name="colorAccent">#17AEC6</item>
</style>
</resources>
我尝试添加以下内容的地方
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:navigationBarColor">@android:color/transparent</item>
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>
到样式“MainTheme”,这只是灰色的栏。我看过This Question and Answers,但这并没有帮助。
我也尝试使用自定义NavigationBar
,背景设置如下
public class CustomNavigationPage : NavigationPage
public CustomNavigationPage()
public CustomNavigationPage(Page root) : base(root)
BarBackgroundColor = Color.Transparent;
BarTextColor = Color.White;
没有快乐。
问。如何让系统工具栏与ToolBar融为一体?
【问题讨论】:
您可以尝试在mainactivity中设置Window.AddFlags(WindowManagerFlags.TranslucentStatus); Window.AddFlags(WindowManagerFlags.LayoutNoLimits);
,并在Resources/drawable
中写入gradient.xml
,将工具栏的背景更改为gradient.xml
【参考方案1】:
有多种方法可以做到这一点!
更简单的方法是将状态栏设置为透明,并使具有渐变的工具栏更大。 您可以检查 SDK 版本是否大于或等于 kitkat,然后添加标志,以便布局没有限制并且导航是半透明的。然后直接在你的布局中,用你的渐变放置背景并添加你想要添加的任何标签/工具栏标题。
【讨论】:
以上是关于如何使用 Xamarin 渐变填充系统状态栏的主要内容,如果未能解决你的问题,请参考以下文章
UINavigationController + 状态栏框架的CGRect
Xamarin Android - 自定义通知托盘图标(状态栏)