Lollipop: gambar di belakang statusBar dengan warnanya yang transparan

142

Saya telah mengatur warna statusBar saya menjadi transparan untuk Lollipop hanya dengan baris berikut dalam tema saya:

<item name="android:statusBarColor">@android:color/transparent</item>

Sekarang saya harus menggambar di belakangnya, tetapi saya tidak bisa mendapatkan gambar apa pun di belakangnya. Saya tahu bagaimana melakukannya dengan windowTranslucentStatusproperti, tetapi tidak ingin menggunakan properti ini karena akan mengabaikan warna statusBar diatur ke transparan.

alxscms
sumber
2
Anda juga dapat menggunakanandroid:fitsSystemWindows="true"
Aznix

Jawaban:

385

Metode # 1:

Untuk mencapai bilah status yang benar-benar transparan, Anda harus menggunakannya statusBarColor, yang hanya tersedia di API 21 ke atas. windowTranslucentStatustersedia di API 19 dan di atasnya, tetapi menambahkan latar belakang berwarna untuk bilah status. Namun, pengaturan windowTranslucentStatusmemang mencapai satu hal yang tidak berubah statusBarColormenjadi transparan: ia menetapkan SYSTEM_UI_FLAG_LAYOUT_STABLE dan SYSTEM_UI_FLAG_LAYOUT_FULLSCREENmenandai. Cara termudah untuk mendapatkan efek yang sama adalah dengan secara manual mengatur flag-flag ini, yang secara efektif menonaktifkan insets yang diberlakukan oleh sistem tata letak Android dan membuat Anda berjuang sendiri.

Anda menyebut baris ini dalam onCreatemetode Anda :

getWindow().getDecorView().setSystemUiVisibility(
    View.SYSTEM_UI_FLAG_LAYOUT_STABLE
    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);

Pastikan juga mengatur transparansi di /res/values-v21/styles.xml:

<item name="android:statusBarColor">@android:color/transparent</item>

Atau atur transparansi secara terprogram:

getWindow().setStatusBarColor(Color.TRANSPARENT);

Sisi baik dari pendekatan ini adalah bahwa tata letak dan desain yang sama juga dapat digunakan pada API 19 dengan memperdagangkan bilah status transparan untuk bilah status transparan yang berwarna.

<item name="android:windowTranslucentStatus">true</item>

Metode # 2:

Jika Anda hanya perlu melukis gambar latar belakang di bawah bilah status Anda, alih-alih memposisikan tampilan di belakangnya, ini dapat dilakukan dengan hanya mengatur latar belakang tema aktivitas Anda ke gambar yang diinginkan dan mengatur transparansi bilah status seperti ditunjukkan dalam metode # 1. Ini adalah metode yang saya gunakan untuk membuat tangkapan layar untuk artikel Android Police dari beberapa bulan yang lalu.

Metode # 3:

Jika Anda harus mengabaikan insets sistem standar untuk beberapa tata letak sembari tetap membuatnya bekerja pada yang lain, satu-satunya cara yang layak untuk melakukannya adalah bekerja dengan kelas yang sering dikaitkan ScrimInsetsFrameLayout. Tentu saja, beberapa hal yang dilakukan di kelas itu tidak diperlukan untuk semua skenario. Misalnya, jika Anda tidak berencana untuk menggunakan overlay bilah status sintetis, cukup komentari semuanya dalam init()metode ini dan jangan repot-repot menambahkan apa pun ke file attrs.xml. Saya telah melihat pendekatan ini berhasil, tetapi saya pikir Anda akan menemukan bahwa itu membawa beberapa implikasi lain yang mungkin banyak pekerjaan untuk diselesaikan.

Saya juga melihat bahwa Anda menentang membungkus banyak tata letak. Dalam hal membungkus satu tata letak di dalam yang lain, di mana keduanya memiliki match_parenttinggi dan lebar, implikasi kinerja terlalu sepele untuk dikhawatirkan. Apa pun itu, Anda dapat menghindari situasi itu sepenuhnya dengan mengubah kelas yang dimilikinya dari FrameLayoutjenis kelas Layout lain yang Anda suka. Ini akan bekerja dengan baik.

Cody Toombs
sumber
9
Terima kasih banyak, pengaturan SYSTEM_UI_FLAG_LAYOUT_STABLEdan SYSTEM_UI_FLAG_LAYOUT_FULLSCREENbendera adalah solusi yang saya cari.
alxscms
3
Saya mencari solusi pertama Anda selama sebulan. Terima kasih!
NeoKree
1
Hai. Kode Anda berfungsi dengan baik. Tetapi ketika saya keluar dari fragmen, Bagaimana saya harus mengembalikan perubahan?
TheOnlyAnil
3
Ini tidak bekerja dengan CollapsingToolbarLayoutdan Toolbar: status bar tetap tidak sepenuhnya transparan dan android:statusBarColortidak berpengaruh
Konstantin Konopko
Terima kasih. Jika Anda kemudian ingin kembali ke aktivitas non-layar penuh, baca developer.sonymobile.com/knowledge-base/tutorials/… .
CoolMind
43

Ini berhasil untuk kasus saya


// Create/Set toolbar as actionbar
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

// Check if the version of Android is Lollipop or higher
if (Build.VERSION.SDK_INT >= 21) {

    // Set the status bar to dark-semi-transparentish
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,
            WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

    // Set paddingTop of toolbar to height of status bar.
    // Fixes statusbar covers toolbar issue
    toolbar.setPadding(0, getStatusBarHeight(), 0, 0);
}

// A method to find height of the status bar
public int getStatusBarHeight() {
    int result = 0;
    int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
    if (resourceId > 0) {
        result = getResources().getDimensionPixelSize(resourceId);
    }
    return result;
}

Untuk informasi lebih lanjut tentang bekerja dengan statusBars: youtube.com/watch?v=_mGDMVRO3iE


Michael
sumber
@TheOnlyAnil menentukan ketinggian toolbar tetap :) "56dp" atau lebih seharusnya terlihat bagus
Michael
4
Mendapatkan tinggi bilah status seperti ini benar-benar tidak didukung, tidak berdokumen, dan pasti akan rusak di versi mendatang. Gunakan cocokSystemWindows = "true" sebagai gantinya.
Greg Ennis
1
Yah saya melakukannya juga karena kadang-kadang Anda hanya perlu.
Greg Ennis
2
Ini adalah ide yang sangat buruk, menurut Chris Banes (Google Engineer) dalam pembicaraan ini: youtube.com/watch?v=_mGDMVRO3iE
Martin Marconcini
1
@Michael FWIW, saya telah melakukan ini di masa lalu dan api WindowInsets an (metode) untuk melakukan ini "harus sederhana dan dilakukan tanpa kita harus memikirkannya", tapi tidak, itu adalah API tidak berguna yang menambahkan sebuah banyak overhead yang tidak dibutuhkan. Google selalu 80% selesai dan memberikan 20% terakhir kepada para devs ... yang meretas hingga mereka mewujudkannya. ¯_ (ツ) _ / ¯
Martin Marconcini
21

Coba tema ini

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="colorPrimaryDark">@android:color/transparent</item>
    <item name="colorPrimary">@color/md_blue_200</item>
    <item name="android:windowDrawsSystemBarBackgrounds">true</item>
    <item name="android:statusBarColor">@android:color/transparent</item>
    <item name="android:windowTranslucentStatus">true</item>
</style>

Pastikan itu, tata letak Anda diatur

android:fitsSystemWindows="false"
Son Nguyen Thanh
sumber
4
Pengaturan android:fitsSystemWindows="false"adalah memotong bilah alat menjadi dua.
Hammad Nasir
16

Dari pada

<item name="android:statusBarColor">@android:color/transparent</item>

Gunakan yang berikut ini:

<item name="android:windowTranslucentStatus">true</item>

Dan pastikan untuk menghapus bantalan atas (yang ditambahkan secara default) pada tata letak 'MainActivity' Anda.

Perhatikan bahwa ini tidak membuat bilah status sepenuhnya transparan, dan masih akan ada overlay "pudar hitam" di atas bilah status Anda.

Jeroen Mols
sumber
2
Saat menggunakan <item name="android:windowTranslucentStatus">true</item>, itu membuat android menempatkan latar belakang hitam pudar di bawah bilah status yang bukan yang saya cari. Adakah cara untuk tidak memiliki latar belakang hitam pudar ini?
alxscms
1
Saya sudah mencoba banyak hal, tetapi saya tidak dapat menemukan cara untuk menghapus latar belakang hitam yang pudar. Karena itu saya menyimpulkan penelitian saya dengan mengatakan itu tidak mungkin di Android (bahkan tidak dengan ScrimLayout). Jenis ini masuk akal, karena memastikan pembacaan yang tepat dari bilah status Anda setiap saat. Saya akan memperbarui jawaban saya di atas.
Jeroen Mols
Saya pikir akan sangat aneh untuk dapat menempatkan warna transparan ke status bar, tanpa bisa menggambar di belakangnya. Saya mengerti mengapa Anda mengatakan masuk akal bahwa Anda tidak dapat menghapus latar belakang hitam pudar ini, tetapi jelas tidak terlalu sulit untuk berhati-hati agar ikon status bar tetap terlihat. Berikut ini adalah artikel polisi android yang menunjukkan penggunaan bilah status transparan androidpolice.com/2014/07/04/… . Saya akan mencoba menghubungi penulis.
alxscms
1
Semoga Anda bisa menghubungi dia. Saya menjadi sangat tertarik untuk melakukan ini juga :)
Jeroen Mols
Bagus! Memperbarui jawaban saya juga.
Jeroen Mols
9

Solusi dari Cody Toombs hampir berhasil untuk saya. Saya tidak yakin apakah ini terkait Xamarin atau tidak, tetapi saya sekarang memiliki solusi yang dapat diterima:

Contoh

Ini pengaturan saya:

Saya memiliki proyek Android di mana saya telah merujuk paket Android.Support v4 dan v7. Saya memiliki dua gaya:

values ​​/ styles.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<resources>
    <style name="MyStyle" parent="@style/Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowTranslucentStatus">true</item>
    </style>
</resources>

values-v21 / styles.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<resources>
    <style name="MyStyle" parent="@style/Theme.AppCompat.Light.NoActionBar">
        <item name="android:statusBarColor">@android:color/transparent</item>
    </style>
</resources>

AndroidManifest menargetkan "MyStyle":

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.agn.test.test">
    <uses-sdk android:minSdkVersion="10" />
    <application android:allowBackup="true" android:icon="@mipmap/icon" android:label="@string/app_name" android:theme="@style/MyStyle">
    </application>
</manifest>

Dan akhirnya kode di Aktivitas Utama:

[Activity (Label = "Test", MainLauncher = true, Icon = "@mipmap/icon")]
public class MainActivity : Activity
{
    protected override void OnCreate (Bundle savedInstanceState)
    {
        base.OnCreate (savedInstanceState);

        SetContentView (Resource.Layout.Main);
        //Resource.Layout.Main is just a regular layout, no additional flags. Make sure there is something in there like an imageView, so that you can see the overlay.

        var uiOptions = (int)Window.DecorView.SystemUiVisibility;
        uiOptions ^= (int)SystemUiFlags.LayoutStable;
        uiOptions ^= (int)SystemUiFlags.LayoutFullscreen;
        Window.DecorView.SystemUiVisibility = (StatusBarVisibility)uiOptions;

        Window.AddFlags (WindowManagerFlags.DrawsSystemBarBackgrounds);
    }
}

Perhatikan bahwa saya menetapkan flag DrawsSystemBarBackgrounds, ini membuat semua perbedaan

Window.AddFlags (WindowManagerFlags.DrawsSystemBarBackgrounds); 

Saya menghabiskan banyak waktu untuk memperbaikinya, terlalu banyak waktu sebenarnya. Semoga jawaban ini membantu siapa pun yang mencoba mencapai hal yang sama.

Gerhard Schreurs
sumber
1
android:windowTranslucentStatusmembutuhkan API level 19 atau lebih tinggi, bagaimana mungkin Anda menggunakannya pada nilai / styles.xml Anda saat memiliki android:minSdkVersion10?
mradzinski
7

Jawaban @Cody Toombs mengarah ke masalah yang membawa tata letak di belakang bilah navigasi. Jadi yang saya temukan adalah menggunakan solusi ini yang diberikan oleh @Kriti

di sini adalah potongan kode Kotlin untuk hal yang sama:

if (Build.VERSION.SDK_INT >= 19 && Build.VERSION.SDK_INT < 21) {
    setWindowFlag(this, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, true)
}

if (Build.VERSION.SDK_INT >= 19) {
    window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
}

if (Build.VERSION.SDK_INT >= 21) {
    setWindowFlag(this, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, false)
    getWindow().setStatusBarColor(Color.TRANSPARENT)
}

private fun setWindowFlag(activity: Activity, bits: Int, on: Boolean) {

    val win: Window = activity.getWindow()

    val winParams: WindowManager.LayoutParams = win.getAttributes()
    if (on) {
        winParams.flags = winParams.flags or bits
    } else {
        winParams.flags = winParams.flags and bits.inv()
    }
    win.setAttributes(winParams)
}

Anda juga perlu menambahkan

android:fitsSystemWindows="false"

lihat root tata letak Anda.

Kishan Solanki
sumber
3

Saya memiliki masalah yang sama jadi saya membuat ImageView yang menarik di belakang bilah status API 19+

Tetapkan gambar khusus di belakang Bilah Status gist.github.com

public static void setTransparent(Activity activity, int imageRes) {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
        return;
    }
    // set flags
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
        activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
        activity.getWindow().setStatusBarColor(Color.TRANSPARENT);
    } else {
        activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    }

    // get root content of system window
    //ViewGroup rootView = (ViewGroup) ((ViewGroup) activity.findViewById(android.R.id.content)).getChildAt(0);
    // rootView.setFitsSystemWindows(true);
    // rootView.setClipToPadding(true);

    ViewGroup contentView = (ViewGroup) activity.findViewById(android.R.id.content);
    if (contentView.getChildCount() > 1) {
        contentView.removeViewAt(1);
    }

    // get status bar height
    int res = activity.getResources().getIdentifier("status_bar_height", "dimen", "android");
    int height = 0;
    if (res != 0)
        height = activity.getResources().getDimensionPixelSize(res);

    // create new imageview and set resource id
    ImageView image = new ImageView(activity);
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, height);
    image.setLayoutParams(params);
    image.setImageResource(imageRes);
    image.setScaleType(ScaleType.MATRIX);

    // add image view to content view
    contentView.addView(image);
    // rootView.setFitsSystemWindows(true);

}
Sumit
sumber
2

Anda dapat menggunakan ScrimInsetFrameLayout

https://github.com/google/iosched/blob/master/android/src/main/java/com/google/samples/apps/iosched/ui/widget/ScrimInsetsFrameLayout.java

android: fitsSystemWindows = "true" harus ditetapkan pada tata letak samaran!

Murtaza Khursheed Hussain
sumber
Saya melihat kelas itu tetapi bagaimana jika saya ingin menggunakan RelativeLayoutbukan FrameLayout?
alxscms
3
gunakan tata letak relatif di dalam pembayaran bingkai.
Murtaza Khursheed Hussain
2
Laying layout di layout jelas bukan solusi bagi saya mengenai kinerja
alxscms
1
kinerja aplikasi tergantung pada banyak hal yang dapat bervariasi. Jika Anda tidak memiliki jalan keluar, cobalah. Best of Luck
Murtaza Khursheed Hussain
Saya mengerti maksud Anda, tetapi harus ada solusi lain, jika tidak, mungkin tidak ada cara untuk mengimplementasikan tata letak apa pun yang telah diterapkan dalam tata letak bingkai khusus ini. Tapi terima kasih apa pun
alxscms
1

Mirip dengan beberapa solusi yang diposting, tetapi dalam kasus saya, saya melakukan bilah status transparan dan memperbaiki posisi bilah tindakan dengan beberapa margin negatif

if (Build.VERSION.SDK_INT >= 21) {
    getWindow().setStatusBarColor(Color.TRANSPARENT);
    FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) toolbar.getLayoutParams();
    lp.setMargins(0, -getStatusBarHeight(), 0, 0);
}

Dan saya gunakan di bilah alat dan tampilan root

android:fitsSystemWindows="true"
jegumi
sumber
1
getStatusBarHeight () tidak standar
Roel
Metode ini diterapkan pada solusi dari @ mike-milla ... public int getStatusBarHeight () {int result = 0; int resourceId = getResources (). getIdentifier ("status_bar_height", "dimen", "android"); if (resourceId> 0) {result = getResources (). getDimensionPixelSize (resourceId); } hasil pengembalian; }
jegumi
Terima kasih. Saya membuatnya: AppBarLayout.LayoutParams lp = (AppBarLayout.LayoutParams) toolbar.getLayoutParams (); lp.topMargin + = getStatusBarHeight ();
CoolMind
1

Ada perpustakaan StatusBarUtil baik dari @laobie yang membantu dengan mudah menggambar gambar di StatusBar.

Cukup tambahkan build.gradle:

compile 'com.jaeger.statusbarutil:library:1.4.0'

Kemudian di set Aktivitas

StatusBarUtil.setTranslucentForImageView(Activity activity, int statusBarAlpha, View viewNeedOffset)

Dalam tata letak

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white"
    android:orientation="vertical">

    <ImageView
        android:layout_alignParentTop="true"
        android:layout_width="match_parent"
        android:adjustViewBounds="true"
        android:layout_height="wrap_content"
        android:src="@drawable/toolbar_bg"/>

    <android.support.design.widget.CoordinatorLayout
        android:id="@+id/view_need_offset"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="@android:color/transparent"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
            app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/>

        <!-- Your layout code -->
    </android.support.design.widget.CoordinatorLayout>
</RelativeLayout>

Untuk info lebih lanjut, unduh demo atau klon dari halaman github dan mainkan dengan semua fitur.

Catatan: Dukungan KitKat dan di atasnya.

Semoga itu bisa membantu orang lain!

Gueorgui Obregon
sumber
0

Dengan Android Studio 1.4, proyek template dengan kode pelat ketel menetapkan Overlaytema di AppbarLayout dan / atau Toolbar Anda. Mereka juga diatur untuk diberikan di belakang bilah status dengan fitSystemWindowatribut = true. Ini akan menyebabkan hanya bilah alat yang dirender secara langsung di bawah bilah status dan yang lainnya akan ditampilkan di bawah bilah alat. Jadi solusi yang diberikan di atas tidak akan bekerja sendiri. Anda harus melakukan perubahan berikut.

  • Hapus tema Hamparan atau ubah menjadi tema hamparan untuk bilah alat.
  • Masukkan kode berikut dalam file styles-21.xml Anda .

    @android: warna / transparan

  • Tetapkan tema ini ke aktivitas yang mengandung laci navigasi di file AndroidManifest.xml .

Ini akan membuat laci Navigasi untuk ditampilkan di belakang bilah status transparan.

Umer Farooq
sumber
0

Yang perlu Anda lakukan adalah mengatur properti ini dalam tema Anda

<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>
Sudhir singh
sumber
1
Saya cukup yakin ini akan membuat tata letak Anda jatuh di bawah tombol navigasi UI (perangkat dengan navigasi di layar). Ini membuat tampilan navigasi bawah tidak dapat diakses di aplikasi kami, jadi kami membuang bendera ini setelah menguji pada Nexus
EpicPandaForce
0

Jawaban yang diterima bekerja untuk saya menggunakan CollapsingToolbarLayout. Penting untuk dicatat, yang setSytstemUiVisibility()mengabaikan semua panggilan sebelumnya ke fungsi itu. Jadi jika Anda menggunakan fungsi itu di tempat lain untuk tampilan yang sama, Anda harus menyertakan View.SYSTEM_UI_FLAG_LAYOUT_STABLEdan View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREENtanda, atau mereka akan ditimpa dengan panggilan baru.

Ini adalah kasus bagi saya, dan begitu saya menambahkan dua bendera ke tempat lain saya membuat panggilan setSystemUiVisibility(), jawaban yang diterima bekerja dengan sempurna.

cpgreen2
sumber
0

Saya akan menambahkan beberapa informasi lebih lanjut di sini. Perkembangan Android terbaru telah membuatnya cukup mudah untuk menangani banyak kasus di status bar. Berikut ini adalah pengamatan saya daristyles.xml

  1. Warna latar belakang : untuk SDK 21+, karena banyak jawaban yang disebutkan, <item name="android:windowTranslucentStatus">true</item> akan membuat bilah status transparan dan ditampilkan di depan UI. Aktivitas Anda akan mengambil seluruh ruang di bagian atas.
  2. Warna latar belakang : sekali lagi, untuk SDK 21+, <item name="android:statusBarColor">@color/your_color</item>cukup memberikan warna pada bilah status Anda, tanpa memengaruhi yang lain.

  3. Namun, di perangkat yang lebih baru (Android M / +), ikon mulai datang dalam nuansa berbeda. OS dapat memberikan warna abu-abu yang lebih gelap ke ikon untuk SDK 23 / +, jika Anda menimpa styles.xmlfile Anda di values-23folder dan menambahkan <item name="android:windowLightStatusBar">true</item>.
    Dengan cara ini, Anda akan memberi pengguna Anda dengan bilah status yang lebih terlihat, jika bilah status Anda memiliki warna terang (pikirkan bagaimana banyak aplikasi Google memiliki latar belakang cahaya namun ikon terlihat di sana dalam warna keabu-abuan).
    Saya menyarankan Anda untuk menggunakan ini, jika Anda memberi warna ke bilah status Anda melalui titik # 2

  4. Pada perangkat terbaru, SDK 29 / + hadir dengan sistem lampu lebar dan tema gelap, dapat dikontrol oleh pengguna. Sebagai devs, kita juga diharapkan untuk mengganti file style kita di values-nightfolder baru , untuk memberi pengguna 2 pengalaman berbeda.
    Di sini lagi, saya telah menemukan titik # 2 efektif dalam memberikan "warna latar belakang ke status bar". Tetapi sistem tidak mengubah warna ikon bilah status untuk aplikasi saya. karena versi hari saya dari gaya terdiri dari tema yang lebih terang, ini berarti bahwa pengguna akan mengalami visibilitas rendah (ikon putih pada latar belakang yang lebih terang)
    Masalah ini dapat diselesaikan dengan menggunakan pendekatan titik # 3 atau dengan menimpa file gaya dalam values-29folder dan menggunakan yang lebih baru api <item name="android:enforceStatusBarContrast">true</item>. Ini akan secara otomatis memaksakan warna abu-abu ke ikon, jika warna latar belakang Anda terlalu terang.

ansh sachdeva
sumber
-1

Inilah tema yang saya gunakan untuk mencapai ini:

<style name="AppTheme" parent="@android:style/Theme.NoTitleBar">

    <!-- Default Background Screen -->
    <item name="android:background">@color/default_blue</item>
    <item name="android:windowTranslucentStatus">true</item>

</style>
Droid Chris
sumber
1
Ada beberapa downvoters yang aneh. Sekalipun suatu solusi tepat bagi Anda dan sebagian lainnya, mereka akan menurunkan suara alih-alih memberikan jawaban lain.
CoolMind
Yang saya minta hanyalah penjelasan. Saya tidak berpikir orang harus bisa mengundurkan diri tanpa penjelasan.
Droid Chris
Saya juga berpikir begitu.
CoolMind
Saya akan menjelaskan opsi latar belakang tidak berfungsi dengan benar dalam bundel ini. Tolong perbaiki jawaban Anda.
Morozov
Hmmm ... versi Android apa yang Anda lakukan ini? Saya menggunakan konfigurasi ini di Android M.
Droid Chris
-3

Solusi yang tepat adalah Mengubah properti dalam XML di bawah tag Aktivitas Anda ke gaya di bawah ini. Itu hanya bekerja

  android:theme="@style/Theme.AppCompat.Light.NoActionBar"
satya phani
sumber