Ошибка пользовательского макета диалогового окна Android

#android #android-layout #dialog

#Android #android-layout #диалоговое окно

Вопрос:

Я пытаюсь создать свой собственный диалог в приложении. Когда я использую layout_weight в своем xml, я попал ViewRootImpl #2 Surface is not valid в свой logcat, однако, когда я использую fixed layout_width или layout_height все кажется нормальным. Может кто-нибудь сказать мне, где я ошибся?

 <?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"
    android:weightSum="4">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="horizontal"
        android:weightSum="4"
        android:background="@color/white">

        <ImageButton
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:id="@ id/imageButton_spades"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:layout_marginTop="30dp"
            android:background="@color/orange"/>

        <ImageButton
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:id="@ id/imageButton_hearts"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:layout_marginTop="30dp"
            android:background="@color/orange"
            />

        <ImageButton
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:id="@ id/imageButton_clubs"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:layout_marginTop="30dp"
            android:background="@color/orange"/>

        <ImageButton
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:id="@ id/imageButton_diamonds"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:layout_marginTop="30dp"
            android:background="@color/orange"/>

    </LinearLayout>


        <LinearLayout
            android:id="@ id/layout_figures"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="3"
            android:orientation="horizontal"
            android:weightSum="4"
            android:background="@color/material_blue_grey_800">

            <ImageButton
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:id="@ id/imageButton_ace"
                android:layout_marginLeft="10dp"
                android:layout_marginRight="10dp"
                android:layout_marginTop="30dp"
                android:background="@color/orange"/>

            <ImageButton
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:id="@ id/imageButton_king"
                android:layout_marginLeft="10dp"
                android:layout_marginRight="10dp"
                android:layout_marginTop="30dp"
                android:background="@color/orange"/>

            <ImageButton
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:id="@ id/imageButton_queen"
                android:layout_marginLeft="10dp"
                android:layout_marginRight="10dp"
                android:layout_marginTop="30dp"
                android:background="@color/orange"/>

            <ImageButton
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:id="@ id/imageButton_jack"
                android:layout_marginLeft="10dp"
                android:layout_marginRight="10dp"
                android:layout_marginTop="30dp"
                android:background="@color/orange"/>

        </LinearLayout>


</LinearLayout>
  

Ответ №1:

Попробуйте это без указания ширины высоты:

         Dialog  dialog = new Dialog(context);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialog.setContentView(R.layout.dialog_friend_data);

        /*******************dialog features*********************/
        final Window window = dialog.getWindow();
        window.setBackgroundDrawable(new ColorDrawable(Color.WHITE));
        window.setLayout(ActionBar.LayoutParams.MATCH_PARENT, ActionBar.LayoutParams.MATCH_PARENT);
        window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

        window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

        dialog.show();
  

Комментарии:

1. Вы имеете в виду, что я должен удалить высоту и ширину из всех элементов xml?

2. я не знаю, что вы сделали в своем макете. Если ваш диалог растягивается, а диалоговое окно отображается не идеально, вы можете использовать окно с диалогом. Он будет автоматически соответствовать каждому экрану.

3. Если я посмотрю предварительный просмотр в Android Studio, то макет выглядит нормально. Но когда я пытаюсь загрузить его в приложение, высота очень мала и не ImageButtons видна. Я попробовал ваше решение, но оно не сработало

4. Я попробовал, window.setLayout(ActionBar.LayoutParams.MATCH_PARENT, ActionBar.LayoutParams.MATCH_PARENT); и это сработало 🙂 Спасибо