私の1つのアクティビティではPalette
を使用してツールバーの色を変更していますが、ActionBarActivity
を使用している5.0デバイスではstatus bar
色がアクティビティテーマのcolorPrimaryDark
の色です。
私は、5.0ではWindow.setStatusBarColor()
を使えるようになりましたが、ActionBarActivity
にはこれがありません。
だから私の質問は5.0にあります。どうやったらActionBarActivity
でステータスバーの色を変えることができますか?
私はその問題を理解しているかどうかわからない。
私はあなたがプログラム的にステータスバーの色を変更したい(そしてデバイスがアンドロイド5.0を持っているならば)それからあなたはあなたはを使うことができます Window.setStatusBarColor()
アクティビティがActivity
とActionBarActivity
のどちらから派生したものであっても、違いはありません。
やってみてください:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop) {
Window window = getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(Color.BLUE);
}
これをActionBarActivity
でテストしたところ、問題なく動作しました。
注:FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS
スタイルファイルに既に設定されている場合は、values-v21
フラグをプログラムで設定する必要はありません。
<item name="Android:windowDrawsSystemBarBackgrounds">true</item>
ステータスバーの色を変更するにはさまざまな方法があります。
1)styles.xmlを使用する。 Android:statusBarColor属性を使用して、これを簡単で静的な方法で行うことができます。
注意:この属性はMaterialテーマと一緒に使用することもできます。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="AppTheme" parent="AppTheme.Base">
<item name="Android:statusBarColor">@Android:color/transparent</item>
</style>
</resources>
2)WindowクラスのsetStatusBarColor(int)メソッドを使って動的に実行できます。ただし、このメソッドはAPI 21以降でのみ使用可能です。それでそれをチェックすることを忘れないでください、さもなければあなたのアプリは確かにより低い装置でクラッシュするでしょう。
これがこのメソッドの実用的な例です。
if (Build.VERSION.SDK_INT >= 21) {
Window window = getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.setStatusBarColor(getResources().getColor(R.color.primaryDark));
}
primaryDarkは私が私のアプリで使用している原色の700色合いです。この色はcolors.xmlファイルで定義できます。
試してみて、質問があれば教えてください。それが役に立てば幸い。
ステータスバーの色はまだAppCompatに実装されていないと思います。これらは利用可能な属性です:
<!-- ============= -->
<!-- Color palette -->
<!-- ============= -->
<!-- The primary branding color for the app. By default, this is the color applied to the
action bar background. -->
<attr name="colorPrimary" format="color" />
<!-- Dark variant of the primary branding color. By default, this is the color applied to
the status bar (via statusBarColor) and navigation bar (via navigationBarColor). -->
<attr name="colorPrimaryDark" format="color" />
<!-- Bright complement to the primary branding color. By default, this is the color applied
to framework controls (via colorControlActivated). -->
<attr name="colorAccent" format="color" />
<!-- The color applied to framework controls in their normal state. -->
<attr name="colorControlNormal" format="color" />
<!-- The color applied to framework controls in their activated (ex. checked) state. -->
<attr name="colorControlActivated" format="color" />
<!-- The color applied to framework control highlights (ex. ripples, list selectors). -->
<attr name="colorControlHighlight" format="color" />
<!-- The color applied to framework buttons in their normal state. -->
<attr name="colorButtonNormal" format="color" />
<!-- The color applied to framework switch thumbs in their normal state. -->
<attr name="colorSwitchThumbNormal" format="color" />
(\ sdk\extras\Android\support\v7\appcompat\res\values\attrs.xmlから)
これを試してみてください、私はこれを使いました、そしてそれはv21でとてもうまくいきます。
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light">
<item name="colorPrimaryDark">@color/blue</item>
</style>
Xamarin.Android MVVMCrossアプリケーションのための特定のR&Dの後、それらの助けを借りて、上記の回答をありがとう
メソッドOnCreateのアクティビティに指定されたフラグ
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
this.Window.AddFlags(WindowManagerFlags.DrawsSystemBarBackgrounds);
}
各MvxActivityについて、テーマは以下のように言及されています
[Activity(
LaunchMode = LaunchMode.SingleTop,
ScreenOrientation = ScreenOrientation.Portrait,
Theme = "@style/Theme.Splash",
Name = "MyView"
)]
私のSplashStyle.xmlは以下のようになります
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme.Splash" parent="Theme.AppCompat.Light.NoActionBar">
<item name="Android:statusBarColor">@color/app_red</item>
<item name="Android:colorPrimaryDark">@color/app_red</item>
</style>
</resources>
そして、私はV7 appcompactを紹介しました。
申請中
<item name="Android:statusBarColor">@color/color_primary_dark</item>
<item name="Android:windowDrawsSystemBarBackgrounds">true</item>
Theme.AppCompat.Light.DarkActionBar
で私のために働いていませんでした。これは、styles.xmlでAndroid:colorPrimary
と一緒にcolorPrimaryDark
を通常どおりに指定することによって行います。
<item name="Android:colorAccent">@color/color_primary</item>
<item name="Android:colorPrimary">@color/color_primary</item>
<item name="Android:colorPrimaryDark">@color/color_primary_dark</item>
そして設定で
if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop)
{
Window window = this.Window;
Window.AddFlags(WindowManagerFlags.DrawsSystemBarBackgrounds);
}
ステータスバーの色をコードに設定する必要はありませんでした。