android - match_parent - DialogFragment a pantalla completa muestra relleno en los lados
full screen dialog android studio (10)
Conocí el problema anteriormente: siempre hay un relleno mientras se configura la pantalla completa. prueba este código en el método dialogFragment onActivityCreated ():
public void onActivityCreated(Bundle savedInstanceState)
{
Window window = getDialog().getWindow();
LayoutParams attributes = window.getAttributes();
//must setBackgroundDrawable(TRANSPARENT) in onActivityCreated()
window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
if (needFullScreen)
{
window.setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
}
}
Estoy creando un DialogFragment personalizado que se muestra debajo de la barra de acciones. Hasta ahora todo funciona bien. Los parámetros de diseño para el fragmento de diálogo son match_parent
para width y wrap_content
para height.
He probado todas las soluciones, incluida la configuración de los parámetros de diseño .width y obteniendo el tamaño de la pantalla y eliminando los temas. Sin embargo, no importa qué hay una pequeña cantidad de espacio en el lado izquierdo, derecho y superior del diálogo que es invisible. Necesito saber cómo eliminar este espacio para que realmente coincida con el ancho de la pantalla y con suerte también se deshace del acolchado superior.
DialogFragment (cuando no se lo indique explícitamente), usará sus estilos internos que envolverán su diseño personalizado (sin pantalla completa, etc.).
No es necesario crear un tema personalizado para este problema. Simplemente use este método y establezca el estilo y el tema de su elección:
/* theme is optional, I am using leanback... */
setStyle(STYLE_NORMAL, R.style.AppTheme_Leanback);
En primer lugar, debe saber que el manejo de la pantalla completa en el fragmento Dialog es diferente del componente Dialog normal; segundo, debe personalizar el fragmento Dialog antes de la creación real del diálogo @ (OnCreateDialog), de acuerdo con la respuesta de "user3244180". pantalla DialogFragment
@Override
public Dialog onCreateDialog(final Bundle savedInstanceState) {
// the content
final RelativeLayout root = new RelativeLayout(getActivity());
root.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
// creating the fullscreen dialog
final Dialog dialog = new Dialog(getActivity());
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(root);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
return dialog;
}
Estaba obteniendo un gran relleno lateral en DialogFragment para Nexus 6p y Pixel.
Se corrigió al definir el estilo personalizado de la siguiente manera:
<style name="Custom.Dialog" parent="android:Theme.DeviceDefault.Dialog.NoActionBar.MinWidth" >
<item name="android:windowBackground">@null</item>
<item name="android:windowIsFloating">true</item>
</style>
parent = "android: Theme.DeviceDefault.Dialog.NoActionBar.MinWidth hizo el truco
Esto funcionó para mí con soporte para <API 11.
Cree un estilo que sea a pantalla completa y tenga un fondo transparente:
<style name="TransparentDialog" parent="@android:style/Theme">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:background">@android:color/transparent</item>
</style>
Luego su código DialogFragment:
public class MyDialog extends DialogFragment {
public static MyDialog newInstance() {
MyDialog dialog = new MyDialog();
dialog.setStyle(DialogFragment.STYLE_NO_FRAME, R.style.TransparentDialog);
return dialog;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.my_custom_layout, container, false);
return view;
}
}
Finalmente, solo para mayor claridad, el contenido de my_custom_layout.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res/com.kabx"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/semi_transparent_grey" >
..........................
..Whatever You Want Here..
..........................
</RelativeLayout>
Lo descubrí usando un tema de diálogo personalizado. windowIsFloating true eliminará el fondo pero agregará un espacio adicional debajo del fondo como fondo. En ese caso, puede usar windowBackground @ null para borrarlo.
<style name="CustomDialog" parent="@android:style/Theme.Holo.Light" >
<item name="android:windowBackground">@null</item>
<item name="android:windowIsFloating">true</item>
</style
Gracias a Raghunandan quien me dio el enlace que incluye todos los atributos de estilo. Me tomó un tiempo pero revisé ese archivo y encontré elementos muy interesantes. Definitivamente echa un vistazo al enlace publicado a continuación para explorar los estilos de tema.
Para el diálogo de pantalla completa, he publicado una respuesta
En este hilo
Por favor, compruebe que esta es la forma más eficiente y más corta. Espero que esto ayude :)
si configura este tema en su cuadro de diálogo, siempre estará en pantalla completa
<!-- DIALOG STYLE -->
<style name="You.Dialog" parent="android:Theme.Holo.Dialog" >
<item name="android:windowNoTitle">true</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowIsFloating">false</item>
</style>
para hacerlo, puedes usar este método setStyle(int,int) .
dialogFragment.setStyle( DialogFragment.STYLE_NORMAL, R.style.You_Dialog );
https://groups.google.com/forum/#!topic/android-developers/NDFo9pF8sHY
De la sugerencia de Dianne Hackborn
Utilice un tema que no sea de diálogo como android.R.style.Theme
o android.R.style.Theme_Light
.
Mira los temas
Ver este enlace
http://developer.android.com/reference/android/app/DialogFragment.html
DialogFragment picker = MyDialogFragment.newInstance();
picker.setStyle( DialogFragment.STYLE_NORMAL, android.R.style.Theme );
picker.show(getFragmentManager(), "MyDialogFragment");
<style name="WideDialog" parent="Theme.AppCompat.Light.DialogWhenLarge">
<item name="android:windowNoTitle">true</item>
<item name="android:windowFullscreen">false</item>
<item name="android:windowIsFloating">false</item>
</style>
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(DialogFragment.STYLE_NORMAL, R.style.WideDialog);
}