2010-04-14 1 views
49

Non riesco a controllare la larghezza della finestra di dialogo. Ho un layout semplice come so`Larghezza finestra di dialogo Android

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:theme="@android:style/Theme.Dialog"> 

    <ScrollView 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 
     <LinearLayout  android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 

     <TextView 
      android:id="@+id/name_prompt_view" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="@string/name_prompt" 
      android:padding="10dip"/> 

     <EditText 
      android:id="@+id/name_inp" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:lines="1" 
      android:maxLines="1" 
      android:maxLength="48" 
      android:inputType="text" /> 

     <TextView 
      android:id="@+id/t1_prompt_view" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="@string/t1_prompt" 
      android:padding="10dip"/> 

     <Spinner 
      android:id="@+id/t1_inp" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:lines="1" 
      android:maxLines="1" 
      android:maxLength="48" 
      android:inputType="text" 
      android:singleLine="true" 
      android:layout_weight="1" 
      android:entries= "@array/t1_allowed_values" /> 

     </LinearLayout> 

    </ScrollView> 

</LinearLayout> 

per qualche motivo il dialogo è solo largo abbastanza per il campo di inserimento testo largo circa 11 caratteri. Come faccio a fare in modo che la larghezza della finestra di dialogo riempia lo schermo?

+3

L'unica soluzione che ha funzionato per me è stato questo: http://stackoverflow.com/questions/2306503/how-to-make-an-alert-dialog-fill-90-of-srceen -size/6631310 # 6631310 – eitama

risposta

85

Ho avuto lo stesso problema.

Ho utilizzato il seguente codice per rendere dialog fill_parent e ha funzionato correttamente.

public class SharePost extends Dialog 
{ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.adaptor_contentsharepost); 

     LayoutParams params = getWindow().getAttributes(); 
     params.height = LayoutParams.FILL_PARENT; 
     getWindow().setAttributes((android.view.WindowManager.LayoutParams) params); 
    } 
} 

disposizione

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:id="@+id/dialogWidth" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    contents here 

</LinearLayout> 
+0

per qualche motivo i parametri di layout xml che ho impostato per width/height non funzionavano nella mia finestra di dialogo, ma questo ha funzionato alla grande! +1 –

+0

Questo ha funzionato per me, ma solo se resetto i parametri * dopo * chiamando 'show()'. –

+2

'fill_parent' è ora deprecato a favore di' match_parent'. – Fred

13

Come Matthias punti in fuori How can I get a Dialog style activity window to fill the screen? soluzione UMAR funziona, ma solo se gli attributi della finestra vengono impostati DOPO setContentView() viene chiamato.

+0

In realtà, come si afferma qui [http://stackoverflow.com/questions/4406804/how-to-control-the-width-and-height-of-default-alert-dialog-in-android], funziona solo dopo .show() (almeno per me). –

56

sto usando:

getWindow().setLayout(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); 
+1

FILL_PARENT è ora obsoleto. – Machado

+1

Utilizzare MATCH_PARENT invece –

14

impostare una larghezza minima al layout di alto più.

android:minWidth="300dp" 

Ad esempio:

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

<!-- Put remaining contents here --> 

</LinearLayout> 
+1

Se non funziona nel layout più esterno, come non ha fatto per me, funziona impostandolo in uno degli elementi del layout, come una barra del titolo. –

+2

Soluzione migliore per me poiché volevo mantenere la definizione interamente in XML e non doverla risolvere nel codice. Grazie per aver segnalato questo attributo! –

1

Da API 8 FILL_PARENT è obsoleto. Utilizza invece MATCH_PARENT.

params.height = LayoutParams.MATCH_PARENT; 
+3

questa è la risposta ad un'altra domanda ... deprecato non significa disabilitato (ancora) –

+0

Sono d'accordo, deprecato non significa disabilitato, ma significa che anche se puoi continuare a usarlo potresti non farlo, come è probabilmente verrà rimosso in una prossima versione. –

+2

non è ancora la risposta a questa domanda in particolare. Poiché FILL_PARENT funziona ancora, non puoi aspettarti di risolvere questa domanda sostituendo un sinonimo preferito. –

7

Prova questo. Per me funziona.

dialog = new Dialog(Activity.this); 
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    dialog.setContentView(R.layout.feedback_popup); 
    dialog.setCancelable(false); 
    dialog.setCanceledOnTouchOutside(false); 

    WindowManager.LayoutParams lp = new WindowManager.LayoutParams(); 
    lp.copyFrom(dialog.getWindow().getAttributes()); 
    lp.width = WindowManager.LayoutParams.MATCH_PARENT; 
    lp.height = WindowManager.LayoutParams.WRAP_CONTENT; 
    lp.gravity = Gravity.CENTER; 

    dialog.getWindow().setAttributes(lp); 
+0

Se si esegue questa operazione in onActivityCreated, se si utilizza DialogFragment funzionerà.
getDialog(). GetWindow(). GetAttributes(). Width = (int) getResources(). GetDimension (R.dimen.uid_alert_dialog_width); dovrebbe funzionare anche – maruti060385