Alterar a cor do texto da barra de status quando primaryDark é branco

87

Estou tentando reproduzir o comportamento do aplicativo Google Agenda: insira a descrição da imagem aqui

mas não encontrei uma maneira de alterar a cor do texto de status. Se eu definir o colorPrimaryDark como branco, não consigo ver os ícones nem o texto da barra de status porque sua cor também é branca.

Existe alguma maneira de alterar a cor do texto da barra de status?

desde já, obrigado

MarcForn
fonte

Respostas:

174

Não tenho certeza de qual nível de API você está tentando atingir, mas se você pode usar coisas específicas da API 23, você pode adicionar o seguinte ao seu AppTheme styles.xml:

<item name="android:statusBarColor">@color/colorPrimaryDark</item>
<item name="android:windowLightStatusBar">true</item>

quando android:windowLightStatusBarestiver definido como verdadeiro, a cor do texto da barra de status poderá ser vista quando a cor da barra de status for branca, e vice-versa quando android:windowLightStatusBarfor definido como falso, a cor do texto da barra de status será projetada para ser vista quando a cor da barra de status for Sombrio.

Exemplo:

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <!-- Status bar stuff. -->
    <item name="android:statusBarColor">@color/colorPrimaryDark</item>
    <item name="android:windowLightStatusBar">true</item> 
</style>
Jon
fonte
38
se meu nível de API for 21, ele não está funcionando, você pode me dizer a alternativa para isso
saikrupa
8
Alguma solução encontrada para Api 21. Por favor me ajude?
iMDroid
1
Observação: android: windowLightStatusBar requer nível de API 23 (min atual é 21) mais ... (⌘F1)
Hardik Darji
Para API 21, isso não é possível. Nos aplicativos do Google, é uma barra preta em vez de branca.
Joris
1
Veja esta postagem para API Nível <23: stackoverflow.com/questions/49254877/…
Basti Vagabond
30

você pode fazer isso programaticamente como esta resposta

apenas adicione isso

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
MG
fonte
14

é muito simples:

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);//  set status text dark
getWindow().setStatusBarColor(ContextCompat.getColor(BookReaderActivity.this,R.color.white));// set status background white

e vice versa:

getWindow().setStatusBarColor(ContextCompat.getColor(BookReaderActivity.this, R.color.black));
View decorView = getWindow().getDecorView(); //set status background black 
decorView.setSystemUiVisibility(decorView.getSystemUiVisibility() & ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); //set status text  light
Vasily G
fonte
4

Como anterior, o SYSTEM_UI_FLAG_LIGHT_STATUS_BAR faz o trabalho no meu caso, não esqueça de configurar para maior que API 22.

adicione isso a oncreate após setContentView:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
}
Maher
fonte
1
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);//  set status text dark

getWindow().setStatusBarColor(ContextCompat.getColor(MainActivity.this,R.color.colorPrimaryDark));// set status background white

Funciona para mim

Mudassar
fonte
Isso requer nível de API 23+.
kanji de
0

Experimente uma vez.

Em seu onCreate()método de atividade , cole o código a seguir.

try {
        if (android.os.Build.VERSION.SDK_INT >= 21) {
                Window window = getWindow();
                window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
                window.setStatusBarColor(ContextCompat.getColor(this, R.color.color_red));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

Nota: color_red - é a cor da barra de status.

Surendar D
fonte
2
A questão é sobre a cor do texto da barra de status, não o fundo da barra de status.
kanji de
0

No seu onCreate()método de atividade , cole o seguinte código após osetContentView(R.layout.activity_generic_main);

Aqui está o código de exemplo abaixo.

public class GenericMain extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_generic_main);
        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);

    }
}
Adnan
fonte
0

Experimente se não for a página inicial

getActivity (). getWindow (). clearFlags (WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
getActivity (). getWindow (). getDecorView (). setSystemUiVisibility (View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
getActivity (). getWindow (). addFlags (WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
getActivity (). getWindow (). setNavigationBarColor (ContextCompat.getColor (context, R.color.white));
getActivity (). getWindow (). setStatusBarColor (ContextCompat.getColor (context, R.color.white));
user5071155
fonte