android - programacion - ¿Cómo puedo obtener una ventana de actividad de estilo de diálogo para llenar la pantalla?
manual de programacion android pdf (10)
En su archivo de manifiesto donde se define nuestra actividad
<activity
android:name=".YourPopUpActivity"
android:theme="@android:style/Theme.Holo.Dialog" >
</activity>
sin barra de acción
<activity android:name=".YourPopUpActivity"
android:theme="@android:style/Theme.Holo.Dialog.NoActionBar"/>
Estoy usando una actividad con el conjunto de temas de diálogo, y quiero que sea a pantalla completa. Intenté todo tipo de cosas, incluso pasando por WindowManager para expandir la ventana a ancho y alto completos manualmente, pero nada funciona.
Aparentemente, una ventana de diálogo (o una actividad con el tema del diálogo) solo se expandirá según su contenido, pero incluso eso no siempre funciona. Por ejemplo, muestro un círculo de barra de progreso que tiene el ancho y el alto establecidos en FILL_PARENT (igual que su contenedor de diseño), pero aún así, el cuadro de diálogo se ajusta a la barra de progreso mucho más pequeña en lugar de llenar la pantalla.
Debe haber una manera de mostrar algo pequeño dentro de una ventana de diálogo, pero que se expanda a tamaño de pantalla completa sin que también se cambie el tamaño del contenido.
Encontré la solución:
En su actividad que tiene el estilo de Theme.Dialog
establecido, haga esto:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.your_layout);
getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
}
Es importante que llame a Window.setLayout()
después de llamar a setContentView()
; de lo contrario, no funcionará.
Envuelva su dialog_custom_layout.xml en RelativeLayout en lugar de cualquier otro diseño . Eso funcionó para mí.
Esta respuesta es una solución para aquellos que usan "Theme.AppCompat.Dialog" o cualquier otro descendiente de "Theme.AppCompat.Dialog" como "Theme.AppCompat.Light.Dialog", "Theme.AppCompat.DayNight.Dialog", etc. Yo mismo tengo que usar el diálogo de AppCompat porque uso AppCompatActivity como se extiende para todas mis actividades. Habrá un problema que hará que el diálogo tenga relleno en cada lado (arriba, derecha, abajo e izquierda) si usamos la respuesta aceptada.
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.your_layout);
getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
}
En el estilo de tu actividad, agrega estos códigos
<style name="DialogActivityTheme" parent="Theme.AppCompat.Dialog">
<item name="windowNoTitle">true</item>
<item name="android:windowBackground">@null</item>
</style>
Como puede observar, el problema que genera el relleno en nuestro cuadro de diálogo es "android: windowBackground", por lo que aquí hago que el fondo de la ventana sea nulo.
Establezca un ancho mínimo en el diseño más alto.
android:minWidth="300dp"
Por ejemplo:
<?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>
Esto sería útil para alguien como yo. Crear estilo de diálogo personalizado:
<style name="MyDialog" parent="Theme.AppCompat.Light.Dialog">
<item name="windowNoTitle">true</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowIsFloating">false</item>
</style>
En el tema del conjunto de archivos AndroidManifest.xml
para la actividad deseada:
<activity
android:name=".CustomDialog"
...
android:theme="@style/MyDialog"/>
Eso es todo, no hay necesidad de llamar a los métodos de manera programática.
La respuesta de Matthias es correcta en su mayoría, pero aún no está llenando toda la pantalla, ya que tiene un pequeño margen en cada lado (señalado por @Holmes). Además de su código, podemos solucionar esto ampliando el estilo Theme.Dialog y agregando algunos atributos como este.
<style name="MyDialog" parent="@android:style/Theme.Dialog">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowNoTitle">true</item>
</style>
Entonces simplemente declaramos Activity con el tema establecido en MyDialog
:
<activity
android:name=".FooActivity"
android:theme="@style/MyDialog" />
Puede agregar estos valores a su estilo android: windowMinWidthMajor y android: windowMinWidthMinor
<style name="Theme_Dialog" parent="android:Theme.Holo.Dialog">
...
<item name="android:windowMinWidthMajor">96%</item>
<item name="android:windowMinWidthMinor">96%</item>
</style>
El ancho mínimo que permite la ventana, a lo largo del eje menor de la pantalla.
Solo quiero llenar solo el 80% de la pantalla para que me haya gustado esto a continuación
DisplayMetrics metrics = getResources().getDisplayMetrics();
int screenWidth = (int) (metrics.widthPixels * 0.80);
setContentView(R.layout.mylayout);
getWindow().setLayout(screenWidth, LayoutParams.WRAP_CONTENT); //set below the setContentview
funciona solo cuando coloco la ventana getwindow (). setLayout ... debajo de setContentView (..)
gracias @Matthias
Para el diálogo Esto puede ser útil para alguien. Quiero un diálogo para tomar el ancho completo de la pantalla. buscó mucho pero nada encontró útil. Finalmente esto funcionó para mí:
mDialog.setContentView(R.layout.my_custom_dialog);
mDialog.getWindow().setBackgroundDrawable(null);
después de agregar esto, mi cuadro de diálogo aparece en todo el ancho de la pantalla.