¿Cómo especificar el tamaño correcto del diálogo en el archivo de disposición XML para el diálogo de Android?

He creado un diálogo de android usando un archivo de disposición de XML como así:

final Dialog dialog = new Dialog(this); dialog.setContentView(R.layout.enabledialog); dialog.setTitle("Define message keys and setup"); Switch locationSwitch = (Switch) dialog.findViewById(R.id.locationSwitch); Switch blareSwitch = (Switch) dialog.findViewById(R.id.blareSwitch); final EditText locationEdit = (EditText) dialog.findViewById(R.id.locationEdit); final EditText blareEdit = (EditText) dialog.findViewById(R.id.blareEdit); WindowManager.LayoutParams lp = new WindowManager.LayoutParams(); lp.copyFrom(dialog.getWindow().getAttributes()); lp.width = WindowManager.LayoutParams.MATCH_PARENT; lp.height = WindowManager.LayoutParams.MATCH_PARENT; dialog.show(); dialog.getWindow().setAttributes(lp); 

Sin embargo, el contenido de mi archivo XML sólo ocupa la mitad de la pantalla, por lo que cuando muestro el diálogo, estoy mostrando un espacio extra, que no se ve bien:

AQUÍ ES UN ESQUEMA DE CÓMO EL DIALOGO MIRA (R.layout.enabledialog):

Introduzca aquí la descripción de la imagen

¿Cómo puedo recortar este espacio extra? En el estudio de android, el editor de diseño asume que el archivo XML debe ocupar toda la pantalla, pero realmente, sólo quiero una pequeña ventana emergente.

Gracias,

Ruchir


EDIT: Aquí está mi archivo de recursos de diseño:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#1dd1e9"> <Switch android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/locationSwitch" android:layout_marginTop="46dp" android:checked="false" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:text="Blah" android:id="@+id/textView" android:textSize="30sp" android:layout_alignTop="@+id/locationSwitch" android:layout_centerHorizontal="true" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceSmall" android:text="Blah Blah Blah" android:id="@+id/textView2" android:gravity="center" android:textSize="20sp" android:layout_below="@+id/locationSwitch" android:layout_centerHorizontal="true" /> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/locationEdit" android:layout_below="@+id/textView2" android:layout_alignLeft="@+id/textView" android:layout_alignStart="@+id/textView" android:layout_alignRight="@+id/textView" android:layout_alignEnd="@+id/textView" android:singleLine = "true" android:imeOptions="actionDone" /> <Switch android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/blareSwitch" android:layout_marginTop="40dp" android:checked="false" android:layout_below="@+id/locationEdit" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:text="Blah" android:id="@+id/textView3" android:textSize="30sp" android:layout_alignBottom="@+id/blareSwitch" android:layout_centerHorizontal="true" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceSmall" android:text="Blah Blah Blah" android:id="@+id/textView4" android:textSize="20sp" android:layout_centerVertical="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/blareEdit" android:layout_below="@+id/textView4" android:layout_alignLeft="@+id/locationEdit" android:layout_alignStart="@+id/locationEdit" android:layout_alignRight="@+id/locationEdit" android:layout_alignEnd="@+id/locationEdit" android:singleLine = "true" android:imeOptions="actionDone" /> </RelativeLayout> 

Intente cambiar fill_parent a wrap_content en su raíz RelativeLayout , así como cambiar MATCH_PARENT a WRAP_CONTENT en su código Java (o deshacerse de todo el setAttributes() ).

En realidad lo tenía en MATCH_PARENT porque cuando se trataba de WRAP_CONTENT, el contenido se superponía y no se ajustaba correctamente

Entonces ese es un problema separado que usted necesitaría arreglar. Comience por obtener el tamaño del diálogo para ser más o menos lo que desea. A continuación, utilice alguna herramienta de inspección (la nueva en AS 2.2, vista de jerarquía, uiautomatorviewer , etc.) para empezar a averiguar cómo arreglar el diseño para evitar las superposiciones.

Intente cambiar la altura de los parámetros de diseño de yout a:

lp.height = WindowManager.LayoutParams.WRAP_CONTENT;

Normalmente configuro el LayoutParams programática. Pienso que puedes intentar DialogFragment con código abajo en onResume :

 /** * Setup position of dialog */ protected void setupDialogPosition() { // setup the dialog WindowManager.LayoutParams p = getDialog().getWindow().getAttributes(); p.width = ViewGroup.LayoutParams.MATCH_PARENT; py = 0; // change height of dailog if (mHeight == ViewGroup.LayoutParams.MATCH_PARENT) { p.height = mScreenHeight - py; if (isStatusBarVisible()) { p.height -= getStatusBarHeight(); } } else { p.height = ViewGroup.LayoutParams.WRAP_CONTENT; } getDialog().getWindow().setGravity(mGravity); getDialog().getWindow().setAttributes(p); } 

Cambie RelativeLayout a LinearLayout:

 <LinearLayout android:layout_height="match_parent" android:layout_width="wrap_content" </LinearLayout> 

Encontré una buena biblioteca para diálogos materiales en github. Por favor, pruebe esto. Se encargará de los diseños para usted.

https://github.com/afollestad/material-dialogs

En su Disposición relativa, especifique layout_height y layout_width y no lo establezca en fill_parent. Ejemplo:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="250dp" android:layout_height="wrap_content"> <TextView android:id="@+id/customdia_text" android:layout_marginTop="20dp" android:layout_width="wrap_content" android:layout_height="40dp" android:layout_centerHorizontal="true" android:text="hello" /> <Button android:id="@+id/custdia_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Ok" android:layout_marginBottom="30dp" android:layout_marginTop="20dp" android:layout_below="@+id/customdia_text" android:layout_centerHorizontal="true"/> </RelativeLayout> 

Convertir directamente desde el valor del recurso:

 int width = getResources().getDimensionPixelSize(R.dimen.popup_width); int height = getResources().getDimensionPixelSize(R.dimen.popup_height); getDialog().getWindow().setLayout(width, height); 

Ahora match_parent en su diseño para el diálogo:

 android:layout_width="match_parent" android:layout_height="match_parent" android:layout_width="match_parent" android:layout_height="match_parent" 

Espero que esto te ayudará.

Crear cuadro de diálogo personalizado como sigue

 public class MyDialog extends Dialog { @Override public void onAttachedToWindow() { super.onAttachedToWindow(); WindowManager.LayoutParams lp = new WindowManager.LayoutParams(); lp.width = WindowManager.LayoutParams.MATCH_PARENT; lp.height = WindowManager.LayoutParams.WRAP_CONTENT; getWindow().setAttributes(lp); } public MyDialog(Context context) { super(context); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.dialog); } } 

Mira el método override onAttachedToWindow (), aquí está tu método trick.this se llama antes del método onCreate (). Por lo que puede anular las propiedades de Windows (ancho y alto) antes de que se cree el cuadro de diálogo.

Llame a este cuadro de diálogo de su actividad de la siguiente manera

 new MyDialog(ActivityContext).show(); 

También hacer algunas modificaciones en el archivo dialog.xml así

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:orientation="vertical"> <Switch android:id="@+id/locationSwitch" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_alignParentTop="true" android:layout_marginTop="46dp" android:checked="false" /> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignTop="@+id/locationSwitch" android:layout_centerHorizontal="true" android:text="Blah" android:textAppearance="?android:attr/textAppearanceLarge" android:textSize="30sp" /> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/locationSwitch" android:layout_centerHorizontal="true" android:gravity="center" android:text="Blah Blah Blah" android:textAppearance="?android:attr/textAppearanceSmall" android:textSize="20sp" /> <EditText android:id="@+id/locationEdit" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignEnd="@+id/textView" android:layout_alignLeft="@+id/textView" android:layout_alignRight="@+id/textView" android:layout_alignStart="@+id/textView" android:layout_below="@+id/textView2" android:layout_marginBottom="50dp" android:imeOptions="actionDone" android:singleLine="true" /> </LinearLayout> 

Editar archivo de diseño si desea una personalización adicional

Cambie el tamaño de RelativeLayout principal según el requisito en el archivo xml. Especifique la altura lo que necesita como abajo

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="100dp" android:background="#1dd1e9"> <Switch android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/locationSwitch" android:layout_marginTop="46dp" android:checked="false" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:text="Blah" android:id="@+id/textView" android:textSize="30sp" android:layout_alignTop="@+id/locationSwitch" android:layout_centerHorizontal="true" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceSmall" android:text="Blah Blah Blah" android:id="@+id/textView2" android:gravity="center" android:textSize="20sp" android:layout_below="@+id/locationSwitch" android:layout_centerHorizontal="true" /> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/locationEdit" android:layout_below="@+id/textView2" android:layout_alignLeft="@+id/textView" android:layout_alignStart="@+id/textView" android:layout_alignRight="@+id/textView" android:layout_alignEnd="@+id/textView" android:singleLine = "true" android:imeOptions="actionDone" /> <Switch android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/blareSwitch" android:layout_marginTop="40dp" android:checked="false" android:layout_below="@+id/locationEdit" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:text="Blah" android:id="@+id/textView3" android:textSize="30sp" android:layout_alignBottom="@+id/blareSwitch" android:layout_centerHorizontal="true" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceSmall" android:text="Blah Blah Blah" android:id="@+id/textView4" android:textSize="20sp" android:layout_centerVertical="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/blareEdit" android:layout_below="@+id/textView4" android:layout_alignLeft="@+id/locationEdit" android:layout_alignStart="@+id/locationEdit" android:layout_alignRight="@+id/locationEdit" android:layout_alignEnd="@+id/locationEdit" android:singleLine = "true" android:imeOptions="actionDone" /> </RelativeLayout> 

Cambiar la Altura y el ancho según Requisitos y no es necesario para setAttributes (lp); En Java. Si está configurando asegúrese de considerar la xml RelativeLayout altura y ancho

  • ¿Cómo activar el botón "Compartir" en la aplicación Android?
  • ¿Puedo usar variables en XML para Android?
  • Tipos de cadenas no permitidos (en 'id' con valor '@ id / bAdd')
  • SchemaFactory no admite W3C XML Schema en plataforma de nivel 8?
  • Cómo especificar el atributo fromXType en el archivo anim xml
  • Cómo llamar a los colores de los recursos de forma dinámica en Android?
  • ¿Cómo agregar documentación a atributos personalizados?
  • Error al intentar probar AnimatedVectorDrawable, "No se puede cambiar de x a z"
  • LinearLayout: Alineación a la derecha del padre
  • Cómo crear una cuadrícula de 10x10 en Android?
  • Uso de una tipografía personalizada en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.