2012-07-23 8 views
35

Kiedy używać w układzie, który określa ten dialog android:layout_width="match_parent" otrzymuję ten dialog:Jak utworzyć okno, które będzie pełne w wymiarze horyzontalnym

small dialog

muszę dialog, który będzie szerszy. Jakieś pomysły?

+0

pisać kod XML szablonu i spróbować wypełnić wartość nadrzędną zamiast meczu rodzica – rajpara

+2

@ rajpara 'fill_parent' i' match_parent' do * dokładnie * to samo (obie są stałymi wartości '-1') – Eborbob

Odpowiedz

120

Możesz to zrobić, chwytając obiekt Window, którego używa okno dialogowe, i resetując szerokość. Oto prosty przykład:

//show the dialog first 
AlertDialog dialog = new AlertDialog.Builder(this) 
     .setTitle("Test Dialog") 
     .setMessage("This should expand to the full width") 
     .show(); 
//Grab the window of the dialog, and change the width 
WindowManager.LayoutParams lp = new WindowManager.LayoutParams(); 
Window window = dialog.getWindow(); 
lp.copyFrom(window.getAttributes()); 
//This makes the dialog take up the full width 
lp.width = WindowManager.LayoutParams.MATCH_PARENT; 
lp.height = WindowManager.LayoutParams.WRAP_CONTENT; 
window.setAttributes(lp); 

Oto wynik końcowy. Zauważ, że istnieje wiele innych stylów, które możesz zrobić w oknie dialogowym, jeśli potrzebujesz dopracować szczegóły (np. Zmienić tło itp.). Kiedy musiałem to robić w przeszłości, zwykle używam tej metody i dostosowuję układ używany w dialogu z setView() na klasie budowniczej.

example

+2

Pamiętaj tylko, że może to wyglądać s trange na dużym ekranie, jak na przykład tablet. – wsanville

+1

Co zrobić, jeśli moja klasa rozszerza aplikację i chcę wywołać alertdialog w tym? – ManishSB

+1

Jeśli używasz DialogFragment, ustawienie musi być wykonane w metodzie onStart, zobacz http://stackoverflow.com/questions/23990726/how-to-make-dialogfragment-width-to-fill-parent/26207535 – Eborbob

3

Innym sposobem rozwiązania tego problemu jest użycie:

import android.support.v7.app.AlertDialog; 

zamiast:

import android.app.AlertDialog; 
+0

Najprostsze, najszybsze i najlepsze rozwiązanie. To powinna być zaakceptowana odpowiedź. – PerracoLabs

Powiązane problemy