Раскраска прозрачной строки состояния

Я пытаюсь раскрасить строку состояния в моем приложении, не окрашивая весь фон действия. Я подумал, что смогу использовать следующий код для создания желтой панели и статуса с неактивным действием. Тем не менее, оттенок белого перекрывает янтарь и окрашивает статус в белый цвет.

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/amber500">

    <!-- colour the bar and status amber -->

    <RelativeLayout xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/activity_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".GuestbookActivity"
        android:fitsSystemWindows="true"
        android:background="@color/offwhite">

        <!-- main UI in here on offwhite backgroud -->

Это эффект, который я хочу получить в статусе, но я не хочу, чтобы янтарный фон отображался здесь, когда список не заполняет пространство. Это не самая последняя строка кода, примененная выше

введите описание изображения здесь

Это то, что происходит в другом упражнении, когда я добавляю самую последнюю строку, то есть добавляю белый фон к внутреннему макету.

введите описание изображения здесь

2 ответа

Решение

Решением было использовать systembartint. Это дало желаемые результаты без добавления оверрейта интерфейса.

У меня никогда не было успеха с fitsSystemWindows. Кажется, это никогда не работает для меня, особенно если у меня есть windowTranslucentNavigation или же windowTranslucentStatus флаг установлен. Таким образом, вам придется вручную устанавливать отступ для внутреннего белого div.

Вот пример:

package com.example.myapp2;

import android.app.Activity;
import android.os.Bundle;

public class MyActivity extends Activity {
    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        int topPadding = 0;
        int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
        if (resourceId > 0) {
            topPadding = getResources().getDimensionPixelSize(resourceId);
        }

        int bottomPadding = 0;
        resourceId = getResources().getIdentifier("navigation_bar_height", "dimen", "android");
        if (resourceId > 0) {
            bottomPadding = getResources().getDimensionPixelSize(resourceId);
        }


     findViewById(R.id.background).setPadding(0, topPadding, 0, bottomPadding);
    }
}

И main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:id="@+id/background"
              android:background="#FF0000"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:fitsSystemWindows="false"
        >

    <View
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#00FF00"
            android:fitsSystemWindows="false" />
</LinearLayout>
Другие вопросы по тегам