2011-05-23 20 views
5

Tengo una Actividad simple y me gustaría tener la forma de un rectángulo redondeado. La actividad usa un Drawable translúcido. He visto ventanas emergentes de otros desarrolladores que son translúcidas (no un tema de diálogo) con esquinas redondeadas y estoy tratando de replicar eso. Cualquier ayuda sería apreciada.¿Cómo agregar esquinas redondeadas al fondo translúcido de actividad?

Aquí está el código que actualmente tengo que produce una ventana translúcida rectangular en el medio de la pantalla.

<style name="Theme.TranslucentDialog"> 
    <item name="android:colorBackgroundCacheHint">@null</item> 
    <item name="android:windowIsTranslucent">true</item> 
    <!-- Note that we use the base animation style here (that is no 
     animations) because we really have no idea how this kind of 
     activity will be used. --> 
    <item name="android:windowBackground">@drawable/translucent_background</item> 
    <item name="android:windowNoTitle">true</item> 
    <item name="android:colorForeground">#fff</item> 
    <item name="android:windowIsFloating">true</item> 
    <item name="android:backgroundDimEnabled">false</item> 
    <item name="android:windowAnimationStyle">@android:style/Animation.Translucent</item> 
</style> 

<drawable name="translucent_background">#60000000</drawable> 

Respuesta

8

yo no era capaz de hacer esto mediante la generación de una forma personalizada en el código. Tuve que lograr esto creando mi propio archivo png de 9 parches. Aquí es el último tema que he creado:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <style name="Theme" parent="android:Theme"> 
    </style> 

    <style name="Theme.TranslucentDialog"> 
     <item name="android:colorBackgroundCacheHint">@null</item> 
     <item name="android:windowIsTranslucent">true</item> 
     <item name="android:windowNoTitle">true</item> 
     <item name="android:colorForeground">#ffffff</item> 
     <item name="android:windowIsFloating">true</item> 
     <item name="android:backgroundDimEnabled">false</item> 
     <item name="android:windowAnimationStyle">@android:style/Animation.Translucent</item> 
     <item name="android:windowBackground">@drawable/notification_panel</item> 
    </style> 

</resources> 

Tenga en cuenta la línea:

<item name="android:windowBackground">@drawable/notification_panel</item> 

Ésta es la línea que establece el fondo de la actividad a la imagen 9-Patch que creé. Esta imagen podría ser cualquier cosa, una imagen, un parche de 9 o una forma personalizada. Utilicé un parche de 9 para que pudiera tener un lindo borde y esquinas redondeadas, manteniendo una ventana de actividad muy translúcida (mostrando todo detrás pero dejando un bonito tono gris donde se encuentra la ventana de actividad).

El 9-patch notification_panel.9.png se encuentra en mi carpeta dibujable. Al principio me sentí un poco intimidado para crear mi propia imagen de 9 parches, pero resulta que al usar Inkscape y el programa de utilidad draw9patch.bat de Android, pude hacer esto con resultados satisfactorios.

Avíseme si alguien tiene alguna pregunta.

+2

¿puede compartir el archivo de imagen 9 ruta? – Derzu

+0

no sé cómo adjuntar archivos PNG a mensajes :(Si Google buscando "Android 9 Patch" Estoy seguro de que puedes encontrar ejemplos. –

5

Tiene que hacer una forma personalizada. Aquí está un ejemplo de archivo XML (rectángulo blanco con esquinas redondeadas):

<?xml version="1.0" encoding="utf-8"?> 
<shape 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <gradient 
     android:startColor="#ffffff" 
     android:endColor="#ffffff"/> 
    <corners 
     android:radius="8dp"/> 
</shape> 
+0

¿Estás seguro de que puedes hacer esto con un dibujo translúcido? ​​# 60000000

+0

Simplemente reemplace 'startColor' y' endColor' con # 60000000 –

+0

Gracias, lo intentaré y le contaré cómo resultó. –