¿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:
- Aplicación para Android que muestra diferentes diseños a la vez con hdmi
- manipular XML Layout mediante programación en Android
- Los caracteres especiales no se muestran en android
- ¿Cómo utilizar mi SurfaceView con main.xml en Android?
- Android obtiene una lista de colores de los recursos
AQUÍ ES UN ESQUEMA DE CÓMO EL DIALOGO MIRA (R.layout.enabledialog):
¿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>
- Tenemos que limpiar todo el proyecto de Android en Eclipse cada vez que se edita un archivo XML
- Android: Uso de StreetViewPanoramaView en XML
- Spinner Error al establecer setOnItemSelectedListener
- RecyclerView wrap_content
- Nuevo en Android - Dibujo de una vista en tiempo de ejecución
- ¿Cómo extraer datos de un artículo de Wikipedia?
- ¿Interrupción de línea en formato XML?
- XML Spinner atributos textAlignment = "derecho" API 16
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.
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