WindowManager addView () не соблюдает MATCH_PARENT

У меня проблема с использованием WindowManager для отображения макета в виде наложения. Макет просто покрывает достаточно площади, чтобы показать минимальную область, которую покрывает его дочерний вид, а не на весь экран.

Я использую следующий код для отображения макета с помощью WindowManager:

    LinearLayout linearLayout = new LinearLayout(MainActivity.this);
    LayoutInflater inflater = LayoutInflater.from(MainActivity.this);
    View inflatedLayout = inflater.inflate(R.layout.note_taking_layout, null, false);
    linearLayout.addView(inflatedLayout);

final WindowManager.LayoutParams paramsForOverlay = new WindowManager.LayoutParams(
                    WindowManager.LayoutParams.MATCH_PARENT,
                    WindowManager.LayoutParams.MATCH_PARENT,
                    WindowManager.LayoutParams.TYPE_SYSTEM_ERROR, // this allows it to show over lock screen AND be able to receive touch.
                    FLAG_TRANSLUCENT_STATUS | FLAG_NOT_TOUCH_MODAL,
                    PixelFormat.TRANSLUCENT);
            paramsForOverlay.gravity = Gravity.TOP | Gravity.CENTER;


    WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
    windowManager.getDefaultDisplay().getMetrics(new DisplayMetrics());

if (windowManager != null) {
                linearLayout.setLayoutParams(new LinearLayout.LayoutParams(
                        LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
                windowManager.addView(linearLayout, paramsForOverlay);
            }

Вот xml для R.layout.note_taking_layout:

<?xml version = "1.0" encoding = "utf-8"?>
<LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
android:orientation = "vertical">

<LinearLayout
    android:id = "@+id/llCanvas"
    android:layout_width = "match_parent"
    android:layout_height = "0dp"
    android:layout_weight = "1"
    android:background = "@color/colorPrimary"
    android:orientation = "vertical">

    <TextView
        android:layout_gravity = "center"
        android:text = "ABCD"
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content" />

</LinearLayout>

<LinearLayout
    android:layout_weight = "1"
    android:background = "@color/colorPrimaryDark"
    android:layout_width = "match_parent"
    android:orientation = "vertical"
    android:layout_height = "0dp">

    <TextView
        android:textColor = "@android:color/white"
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:text = "world" />

    <Button
        android:id = "@+id/bDestroy"
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:text = "hello" />
</LinearLayout>

Вот как это должно выглядеть:

WindowManager addView () не соблюдает MATCH_PARENT

А вот как это выглядит на самом деле:

WindowManager addView () не соблюдает MATCH_PARENT

Что я могу сделать, чтобы он занимал весь экран?

Обновлено: Я показываю кнопку и раскрываю ее на весь экран, используя это:

final Button button = new Button(MainActivity.this);
button.setText("tis a button");
button.setLayoutParams(
                    new ViewGroup.LayoutParams(
                            ViewGroup.LayoutParams.MATCH_PARENT,
                            ViewGroup.LayoutParams.MATCH_PARENT));
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
0
879
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

После проб и ошибок я обнаружил, что не устанавливаю MATCH_PARENT для View inflatedLayout. Итак, вместо этого:

            LayoutInflater inflater = LayoutInflater.from(MainActivity.this);
            View inflatedLayout = inflater.inflate(R.layout.note_taking_layout, null, false);
            linearLayout.addView(inflatedLayout);

Я должен был сделать это:

            LayoutInflater inflater = LayoutInflater.from(MainActivity.this);
            View inflatedLayout = inflater.inflate(R.layout.note_taking_layout, null, false);
            inflatedLayout.setLayoutParams(     // THIS!
                    new ViewGroup.LayoutParams(
                            ViewGroup.LayoutParams.MATCH_PARENT,
                            ViewGroup.LayoutParams.MATCH_PARENT));
            linearLayout.addView(inflatedLayout);

Даже если это ваш собственный ответ, примите его как правильный ответ, поскольку я считаю, что это правильный ответ.

musooff 18.05.2020 09:24

Извините, забыл об этом. Готово сейчас.

Usman 19.05.2020 10:09

Другие вопросы по теме