我正在尝试将我的应用设为主题,以遵循Android的外观。我的项目是一个针对API 23的Xamarin.Android项目,但最低API目标是16.所以我必须使用AppCompat库在所有API上使用相同的设计。
我已按照以下指南操作:Material Theme,Beautiful Material Design with the Android Support Design Library,Android Tips: Hello AppCompatActivity, Goodbye ActionBarActivity并创建了以下文件:
资源/值/ styles.xml:
<resources>
<style name="MyTheme" parent="MyTheme.Base">
</style>
<style name="MyTheme.Base" parent="Theme.AppCompat.Light">
<item name="colorPrimary">#F44336</item>
<item name="colorPrimaryDark">#D32F2F</item>
<item name="colorAccent">#FF4081</item>
</style>
</resources>
资源/值-V21 / styles.xml
<resources>
<!--
Base application theme for API 21+. This theme replaces
MyTheme from resources/values/styles.xml on API 21+ devices.
-->
<style name="MyTheme" parent="MyTheme.Base">
<item name="android:windowContentTransitions">true</item>
<item name="android:windowAllowEnterTransitionOverlap">true</item>
<item name="android:windowAllowReturnTransitionOverlap">true</item>
<item name="android:windowSharedElementEnterTransition">@android:transition/move</item>
<item name="android:windowSharedElementExitTransition">@android:transition/move</item>
</style>
</resources>
MainActivity.cs
using Android.App;
using Android.Widget;
using Android.OS;
using Android.Support.V7.App;
namespace TestThemeApp
{
[Activity(Label = "TestThemeApp", MainLauncher = true, Icon = "@drawable/icon", Theme = "@style/MyTheme")]
public class MainActivity : AppCompatActivity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
// Set our view from the "main" layout resource
SetContentView (Resource.Layout.Main);
}
}
}
我只是想让工具栏变红,状态栏变为深红色,但状态栏颜色不会改变。这就是它的样子:
我做错了什么?
答案 0 :(得分:0)
在你的风格中尝试这个(Resources / values-v21 / styles.xml)
<item name="android:windowDrawsSystemBarBackgrounds">true</item> > <item name="android:statusBarColor">@color/cobalt_light</item>
我个人更喜欢在活动的onCreate
方法中处理它:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(getResources().getColor(R.color.gray_very_dark));
window.setNavigationBarColor(getResources().getColor(R.color.gray_darker));
}
答案 1 :(得分:0)
对于简单的解决方法,您可以将主要颜色更改为状态栏的所需颜色,它会自动更改状态栏的颜色。
注意:这是一个解决方法,直到找到正确的答案。
答案 2 :(得分:0)
您必须在MainActivity顶部添加一个标记,并在结尾处设置条形颜色。
public class MainActivity : AppCompatActivity
{
protected override void OnCreate(Bundle bundle)
{
// First check if the current SDK is >= 21. Else it will cause trouble
if ((int)Build.VERSION.SdkInt >= 21)
Window.AddFlags(WindowManagerFlags.DrawsSystemBarBackgrounds);
base.OnCreate(bundle);
// Set our view from the "main" layout resource
SetContentView (Resource.Layout.Main);
SetBarColor();
}
public void SetBarColor ()
{
if((int)Build.VERSION.SdkInt >= 21)
Window.SetStatusBarColor(Color.ParseColor("#FF0000"));
}
}
答案 3 :(得分:0)
使用下面的代码段来更改状态栏颜色:
<p:commandButton process="@this" action="http://..." value="Test" />
答案 4 :(得分:-1)
我认为我已根据其他答案找到了最优雅的解决方案:
我唯一改变的是在OnCreate(Bundle bundle)
函数中添加了标志:
protected override void OnCreate(Bundle bundle)
{
if ((int)Build.VERSION.SdkInt >= (int)BuildVersionCodes.Lollipop)
Window.AddFlags(Android.Views.WindowManagerFlags.DrawsSystemBarBackgrounds);
base.OnCreate(bundle);
// Set our view from the "main" layout resource
SetContentView (Resource.Layout.Main);
}
就是这样!样式文件完成其余的工作,在较旧版本的android上,状态栏不会改变。