Как залить цветом весь экран?

Для проверки работы программы использую Samsung SM-A015F, который имеет врезку камеры в центре верхнего края экрана. Я пытаюсь залить цветом ВЕСЬ экран. Но в результате, части экрана справа-слева от врезки камеры не заливаются! Я попытался использовать layoutInDisplayCutoutMode (не знаю правильно ли я это сделал), но в результате при значении "LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES" справа-слева от врезки заливается белым цветом, а при других значениях - чёрным цветом. Вот код Activity:

import androidx.appcompat.app.AppCompatActivity;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;

public class MainActivity extends AppCompatActivity {
    public MyView myView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        // делаю навигационную панель выволзающей
        View decorView = getWindow().getDecorView();
        decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                        | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                        | View.SYSTEM_UI_FLAG_FULLSCREEN);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
        //пытаюсь менять разные значения для того, чтобы изображение не обрезалось выше врезки камеры
        // но при таком значении  - экран справа-слева от врезки БЕЛЫЙ
        getWindow().getAttributes().layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
        // а при таких значениях  - экран справа-слева от врезки ЧЁРНЫЙ
        //getWindow().getAttributes().layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
        //getWindow().getAttributes().layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER;
        //getWindow().getAttributes().layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT;
        }
        myView = new MyView(this);
        setContentView(myView);
    }

    @Override
    protected void onResume() {
        super.onResume();
        myView.resume();
    }

    @Override
    protected void onPause() {
        super.onPause();
        myView.pause();
    }
}

Вот код класса MyView:

package com.medinq.searchhardbutton;

import android.content.Context;
import android.graphics.Canvas;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class MyView extends SurfaceView implements Runnable{
    Context context;
    private Canvas canvas;
    private SurfaceHolder ourHolder;
    private boolean running = false;
    Thread myThread;

    public MyView(Context context) {
        super(context);
        this.context = context;
        ourHolder = getHolder();
        draw();
    }
    
    private void draw() {
        if (ourHolder.getSurface().isValid()) {
            canvas = ourHolder.lockCanvas();
            canvas.drawRGB(255, 0, 0);
            ourHolder.unlockCanvasAndPost(canvas);
        }
    }

    @Override
    public void run() {
        while (running){
            draw();
            }
        }

    public void resume() {
        running = true;
        myThread = new Thread(this);
        myThread.start();
    }

    public void pause() {
        running = false;
    }
}

И файл манифеста:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.medinq.searchhardbutton">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="example"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.SearchHardButton">
        <activity android:name=".MainActivity"
            android:theme="@style/Theme.AppCompat.Light.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

Если я запускаю этот код на эмуляторе PIXEL 3 XL, то условие

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {

ложно, оператор не выполняется. НО в результате экран заполняется цветом ПОЛНОСТЬЮ. На PIXEL 3 XL вообще ничего не нужно предпринимать, он в любом случае заполняет ВЕСЬ экран цветом.

Подскажите, как поменять код для того, чтобы экран моего смартфона был ПОЛНОСТЬЮ залит цветом?


Ответы (0 шт):