Android: Margen mínimo de diálogo

Yo uso android android.app.Dialog para crear un cuadro de diálogo personalizado (para el botón y el fondo) En mi Diálogo tengo un TextView dentro de un ScrollView mientras que tengo un texto corto este show perfecly cómo quiero, pero si el texto es muy grande mi Dialog tomar la pantalla completa y quiero tener un margen mínimo entre el diálogo y el borde de la pantalla.

Mi problema es que quiero que el diálogo no sea más grande que la necesidad y no puedo establecer un tamaño de arreglo en esto?

Here is how this look today.....I what a margin like this

Cómo es mi Diálogo ahora.Quiero un margen como este.


El GameDialog.java

 public class GameDialog extends Dialog { public GameDialog(Context ct, int titleID, int messageID) { super(ct, R.style.dialog_style); this.setContentView(R.layout.dialog_layout); } // This exist more code but this has noting with the layout to do,only set the text and show the button that exist since the XML file. } 

El estilo de R.style.dialog_style

 <style name="dialog_style" parent="@android:style/Theme.Dialog"> <item name="android:windowBackground">?button_image</item> <item name="android:windowNoTitle">true</item> <item name="android:textColor">#FF000000</item> <item name="android:textSize">20sp</item> </style> 

El R.layout.dialog_layout

 <?xml version="1.0" encoding="utf-8"?> <!-- Dialog layout that show title and a textarea, and under this allow a row of button that is center layout. --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content"> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="14px" android:layout_marginRight="14px"> <TextView android:layout_gravity="center_vertical" android:id="@+id/text_title" android:layout_width="fill_parent" android:layout_height="wrap_content"> </TextView> </LinearLayout> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="0px" android:layout_weight="1" android:layout_marginLeft="14px" android:layout_marginRight="14px"> <ScrollView android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/text_main" android:padding="5px" android:layout_width="fill_parent" android:layout_height="wrap_content" > </TextView> </ScrollView> </LinearLayout> <LinearLayout android:id="@+id/layout_button" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:orientation="horizontal"> <!-- this will be show while need to show a button --> <ImageView style="?icon_size.button" android:visibility="gone"/> <ImageView style="?icon_size.button" android:visibility="gone"/> <ImageView style="?icon_size.button" android:visibility="gone"/> <ImageView style="?icon_size.button" android:visibility="gone"/> <ImageView style="?icon_size.button" android:visibility="gone"/> </LinearLayout> </LinearLayout> 

El marco realmente lo hace en las imágenes de fondo por sí mismos. En otras palabras, si echa un vistazo al tema definido para el marco, su atributo windowBackground es sólo un color claro, es decir:

 <item name="android:windowBackground">@android:color/transparent</item> 

Y entonces la imagen de fondo colocada en el elemento de diseño de raíz es un parche de 9 que tiene relleno incorporado alrededor de todos los lados (es decir, un espacio extra incorporado en la imagen de modo que cuando la imagen se estira para llenar la pantalla que todavía se puede ver alrededor de los bordes) . Echa un vistazo a uno de los paneles de la fuente AOSP para tener una idea de lo que quiero decir ( enlace ).

Así que para su solución me gustaría recomendar dos cosas:

  1. Modifique su estilo personalizado con windowBackground como he descrito anteriormente
  2. Actualice su imagen de fondo personalizada para incluir ese margen transparente inherente

Para el Paso 2, si su imagen es actualmente un 9-patch, haga lo mismo que Google hizo. Si creó la imagen en XML, puede utilizar una <layer-list> como el ejemplo siguiente para incrustar el rectángulo visible dentro de otro con relleno:

 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item> <shape android:shape="rectangle" > <solid android:color="@android:color/transparent" /> <padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" /> </shape> </item> <!-- This shape will be inset by the padding set above --> <item> <shape android:shape="rectangle" > <solid android:color="#262626" /> </shape> </item> </layer-list> 

El relleno no se transfiere al contenido en este caso, por lo que también tendrá que agregar relleno a su elemento de diseño raíz para que coincida con los límites de contenido con la visualización de la imagen.

Simplemente agregue los márgenes de diseño al grupo de vista superior (su LinearLayout).

Además, tiene muchos diseños anidados innecesarios y no debe utilizar unidades de píxeles. Tu dialog_layout.xml debería tener el siguiente aspecto:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_margin="14dp" > <TextView android:id="@+id/text_title" android:layout_width="fill_parent" android:layout_height="wrap_content" android:paddingRight="14dp" android:paddingLeft="14dp" /> <ScrollView android:layout_width="fill_parent" android:layout_height="wrap_content" android:paddingRight="14dp" android:paddingLeft="14dp"> <TextView android:id="@+id/text_main" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </ScrollView> <LinearLayout android:id="@+id/layout_button" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:orientation="horizontal"> <!-- this will be show while need to show a button --> <ImageView style="?icon_size.button" android:visibility="gone"/> <ImageView style="?icon_size.button" android:visibility="gone"/> <ImageView style="?icon_size.button" android:visibility="gone"/> <ImageView style="?icon_size.button" android:visibility="gone"/> <ImageView style="?icon_size.button" android:visibility="gone"/> </LinearLayout> </LinearLayout> 
  • Android: TabActivity obsoleto, el uso de fragmentos?
  • Intentando utilizar el tema holo en Android no funciona
  • Eliminar icono / logotipo de la barra de acción de android
  • Mover una imagen en una ruta circular en android
  • NullPointerException en getReseources () Bitmap Array
  • Icono flotante en otras aplicaciones
  • Modificación de la capa LayerDrawable en Android 2.3 .X (Gingerbread) e inferior
  • Android: ¿puede tener un efecto de rizado cuyo color de estado predeterminado es transparente?
  • Diseño de cajón y diseño de múltiples paneles
  • Android TextView con varias líneas
  • Los elementos listView desaparecen en desplazamiento para android 2.3
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.