Według twórcy platformy Android, Dianne Hackborn w tym poście w grupie dyskusyjnej, Dialogi ustawiły szerokość i wysokość układu najwyższego poziomu okna na WRAP_CONTENT
. Aby powiększyć okno dialogowe, możesz ustawić te parametry naMATCH_PARENT
.
Kod demonstracyjny:
AlertDialog.Builder adb = new AlertDialog.Builder(this);
Dialog d = adb.setView(new View(this)).create();
// (That new View is just there to have something inside the dialog that can grow big enough to cover the whole screen.)
WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
lp.copyFrom(d.getWindow().getAttributes());
lp.width = WindowManager.LayoutParams.MATCH_PARENT;
lp.height = WindowManager.LayoutParams.MATCH_PARENT;
d.show();
d.getWindow().setAttributes(lp);
Zauważ, że atrybuty są ustawiane po wyświetleniu okna dialogowego. System jest drobiazgowy, kiedy jest ustawiony. (Wydaje mi się, że silnik układu musi ustawić je przy pierwszym wyświetleniu okna dialogowego lub coś w tym rodzaju).
Lepiej byłoby to zrobić, rozszerzając Theme.Dialog, wtedy nie musiałbyś grać w zgadywanie, kiedy wywołać setAttributes. (Chociaż nieco więcej pracy wymaga, aby okno dialogowe automatycznie przyjęło odpowiedni jasny lub ciemny motyw lub motyw Honeycomb Holo. Można to zrobić zgodnie z http://developer.android.com/guide/topics/ui/themes. HTML # SelectATheme )
Spróbuj owinąć niestandardowy układ okna dialogowego
RelativeLayout
zamiastLinearLayout
. To działało dla mnie.źródło
Określenie FILL_PARENT w oknie dialogowym, jak sugerowali inni, nie działało dla mnie (na Androidzie 4.0.4), ponieważ po prostu rozciągnęło czarne tło okna dialogowego, aby wypełnić cały ekran.
To, co działa dobrze, to użycie minimalnej wartości wyświetlania, ale określenie jej w kodzie, dzięki czemu okno dialogowe zajmuje 90% ekranu.
Więc:
Ogólnie rzecz biorąc, w większości przypadków wystarczające jest jedynie dostosowanie szerokości.
źródło
Ustaw
android:minWidth
iandroid:minHeight
w swoim niestandardowym widoku xml. Mogą one zmusić alert do nie tylko zawijania rozmiaru zawartości. Korzystając z takiego widoku, należy to zrobić:źródło
Jeszcze prostsze po prostu zrób to:
źródło
onCreate
po rotacji urządzenia. W tym przypadku nie możemy polegać na szerokości / wysokości czegokolwiek w układzie, ponieważ nie został on jeszcze utworzony; ale fizyczna szerokość / wysokość urządzenia są nadal dostępne.ViewGroup.LayoutParams.WRAP_CONTENT
jako jeden z parametrówźródło
FILL_PARENT
szerokość obliczoną jako 90% szerokości bieżącego wyświetlacza. Ale podoba mi się odpowiedź, ponieważ jest łatwiejsza niż inne.Wszystkie pozostałe odpowiedzi tutaj mają sens, ale nie spełniały wymagań Fabiana. Oto moje rozwiązanie. To może nie być idealne rozwiązanie, ale działa dla mnie. Wyświetla okno dialogowe na pełnym ekranie, ale możesz określić wypełnienie u góry, u dołu, z lewej lub z prawej strony.
Jak widać mam tam Androida: paddingTop = 20dp jest w zasadzie tym, czego potrzebujesz. Android: windowBackground = @ kolor / Black0Percent jest tylko kod koloru ogłoszony na moim color.xml
Ten kod koloru służy jedynie jako manekin do zamiany domyślnego tła okna okna dialogowego na kolor przezroczystości 0%.
Wreszcie jest nasze okno dialogowe, które ustawia niestandardowy widok, który korzysta z naszego pliku dialog.xml:
Wniosek: Próbowałem zastąpić motyw okna dialogowego w pliku styles.xml o nazwie CustomDialog. Zastępuje układ okna dialogowego i daje mi możliwość ustawienia wypełnienia i zmiany krycia tła. To może nie być idealne rozwiązanie, ale mam nadzieję, że ci to pomoże :)
źródło
DialogFragment
) przychodzi, kiedy to robisz:Dialog customDialog = new Dialog(context, STYLE);
dzięki, NAPRAWDĘ, dziękuję.Możesz użyć wartości procentowej dla szerokości okna dialogowego (JUST).
Spójrz na ten przykład z motywu Holo:
Wszystko, co musisz zrobić, to rozszerzyć ten motyw i zmienić wartości „Major” i „Minor” do 90% zamiast 65%.
Pozdrowienia.
źródło
Dla mnie dobrze działały:
(uwaga: windowMinWidthMajor / Minor, jak sugerowano w poprzednich odpowiedziach, nie pomogło. Moje okna dialogowe ciągle zmieniały rozmiary w zależności od zawartości)
i wtedy:
źródło
Rozwiązanie z faktycznymi obliczeniami 90%:
gdzie
getScreenWidth(Activity activity)
zdefiniowano następujące (najlepiej umieścić w klasie Utils):źródło
Uzyskaj szerokość urządzenia:
następnie użyj go do utworzenia 90% okna dialogowego,
źródło
Cóż, musisz ustawić wysokość i szerokość okna dialogowego, aby to pokazać (dialog.show ())
więc zrób coś takiego:
źródło
Zdecydowanie najprostszy sposób, jaki mogę wymyślić -
Jeśli twoje okno dialogowe składa się z pionowego układu liniowego, po prostu dodaj widok manekina „wypełniający wysokość”, który zajmie całą wysokość ekranu.
Na przykład -
Zwróć
android:weightSum="1"
uwagę na atrybuty LinearLayout i atrapy Atrybutówandroid:layout_weight="1"
widokuźródło
Cóż, musisz ustawić wysokość i szerokość okna dialogowego, aby to pokazać (dialog.show ())
więc zrób coś takiego:
Otrzymując ten kod, wprowadziłem kilka zmian:
jednak rozmiar okna dialogowego może ulec zmianie, gdy urządzenie zmieni swoją pozycję. Być może musisz poradzić sobie sam, gdy zmienią się dane. PD: peekDecorView, oznacza, że układ w działaniu jest poprawnie zainicjowany, w przeciwnym razie możesz go użyć
w celu uzyskania rozmiaru ekranu
źródło
Po zainicjowaniu obiektu okna dialogowego i ustawieniu widoku zawartości. Zrób to i ciesz się.
(w przypadku, gdy ustawiam 90% na szerokość i 70% na wysokość, ponieważ szerokość 90% będzie ponad paskiem narzędzi)
źródło
Moja odpowiedź oparta jest na komie, ale nie wymaga zastąpienia onStart, ale tylko onCreateView, który prawie zawsze jest zastępowany domyślnie podczas tworzenia nowych fragmentów.
Przetestowałem to na Androidzie 5.0.1.
źródło
Oto mój wariant niestandardowej szerokości okna dialogowego:
W zależności od orientacji urządzenia (
ThemeHelper.isPortrait(mContext)
) szerokość okna dialogowego będzie wynosić 95% (dla trybu pionowego) lub 65% (dla poziomego). To trochę więcej, niż autor poprosił, ale może być przydatne dla kogoś.Musisz utworzyć klasę wykraczającą poza Dialog i umieścić ten kod w swojej
onCreate(Bundle savedInstanceState)
metodzie.Dla wysokości okna dialogowego kod powinien być podobny do tego.
źródło
ThemeHelper
? Nie mam tej klasy dostępnej w moim projekcie.ThemeHelper
jest tylko klasą pomocniczą dla moich potrzeb. Ta metodaisPortrait(Context)
zwraca, czy orientacja ekranu urządzenia jest pionowa czy pozioma.źródło
Powyżej wielu odpowiedzi są dobre, ale żadna z nich nie zadziałała dla mnie w pełni. Więc połączyłem odpowiedź z @nmr i otrzymałem ten.
źródło
źródło
Jeśli używasz układu ograniczeń , możesz ustawić w nim dowolny widok, aby wypełnić procent ekranu:
layout_constraintWidth_percent = "0.8"
Na przykład, jeśli masz ScrollView w oknie dialogowym i chcesz ustawić go na procent wysokości ekranu. Byłoby tak:
Mam nadzieję, że to komuś pomaga!
źródło
Daj AlertDialog ten motyw
źródło
Oto krótka odpowiedź, która zadziałała dla mnie (Testowane na API 8 i API 19).
źródło
źródło
musisz użyć stylu @ style.xml, takiego jak CustomDialog, aby wyświetlić okno dialogowe, które można dostosować.
i użyj tego stylu w Activity.java w ten sposób
i twój custom_dialog.xml powinien znajdować się w katalogu układu
źródło
źródło