AlertDialog z widokiem niestandardowym: Zmień rozmiar, aby zawinąć zawartość widoku

Mam ten problem w aplikacji, którą buduję. Proszę zignorować wszystkie niedociągnięcia w projektowaniu i brak najlepszych rozwiązań, aby pokazać przykład tego, czego nie mogę rozwiązać.

mamDialogFragment który zwraca podstawowyAlertDialog ze zwyczajemView ustawić za pomocąAlertDialog.Builder.setView(). Jeśli toView ma specyficzne wymagania dotyczące rozmiaru, jak uzyskaćDialog aby poprawnie zmienić rozmiar, aby wyświetlić całą zawartość niestandardowąView?

Oto przykładowy kod, którego używam:

package com.test.test;

import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.Spinner;
import android.widget.TextView;

public class MainActivity extends Activity {

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

        // Use a button for launching
        Button b = new Button(this);
        b.setText("Launch");
        b.setOnClickListener(new OnClickListener() {    
            @Override
            public void onClick(View v) {
                // Launch the dialog
                myDialog d = new myDialog();
                d.show(getFragmentManager(), null);
            }
        });

        setContentView(b);
    }

    public static class myDialog extends DialogFragment {

        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {           
            // Create the dialog
            AlertDialog.Builder db = new AlertDialog.Builder(getActivity());
            db.setTitle("Test Alert Dialog:");
            db.setView(new myView(getActivity()));

            return db.create();
        }

        protected class myView extends View {
            Paint p = null;

            public myView(Context ct) {
                super(ct);

                // Setup paint for the drawing
                p = new Paint();
                p.setColor(Color.MAGENTA);
                p.setStyle(Style.STROKE);
                p.setStrokeWidth(10);
            }

            @Override
            protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
                setMeasuredDimension(800, 300);
            }

            @Override
            protected void onDraw(Canvas canvas) {
                // Draw a rectangle showing the bounds of the view
                canvas.drawRect(0, 0, getMeasuredWidth(), getMeasuredHeight(), p);
            }
        }
    }
}

A Button jest tworzony, co otwieraDialogFragment na kliknięcie. ZwyczajView (myView) musi mieć szerokość 800 i wysokość 300, która jest poprawnie ustawiona w nadpisaniuonMeasure(). ToView, rysuje zmierzone granice w kolorze magenta do celów debugowania.

Szerokość 800 jest szersza niż domyślnaDialog rozmiar na moim urządzeniu, ale jest przycinany, a nie rozciągany poprawnie.

Przejrzałem następujące rozwiązania:

DialogFragment.getDialog zwraca wartość nullJak kontrolować szerokość i wysokość domyślnego okna Alert w systemie Android?Rozmiar okna dialogowego alarmu lub niestandardowego okna alertu

Wyprowadziłem następujące dwa podejścia do kodowania:

ZdobądźWindowManager.LayoutParams zDialog i zastąp jemyDialog.getDialog().getWindow().get/setAttributes()UżywającsetLayout(w, h) metoda domyDialog.getDialog().getWindow().setLayout()

Próbowałem ich wszędzie, o czym myślę (nadrzędnyonStart(), wonShowListener, poDialog jest tworzony i pokazywany itp.) i może ogólnie uzyskać poprawne działanie obu metod, jeśliLayoutParams są dostarczane aokreślona wartość. Ale zawszeWRAP_CONTENT jest dostarczane, nic się nie dzieje.

Jakieś sugestie?

EDYTOWAĆ:

Zrzut ekranu sytuacji:

Zrzut ekranu o określonej wartości (tutaj wpisana jest notatka 900, 850 nie obejmuje całej szerokości Widoku, co ma sens, biorąc pod uwagę, że całe okno jest modyfikowane. To zapewnia - jeśli inny był potrzebny - powódWRAP_CONTENT jest niezbędne / stałe wartości nie są odpowiednie):

questionAnswers(8)

yourAnswerToTheQuestion