2010-04-22 16 views
6

Mi caso de uso es escribir una actividad de controlador de superposición para una vista previa de cámara panorámica. Seguí las instrucciones de un par de tutoriales para escribir un tema transparente.La actividad debe ser transparente, pero tiene fondo negro

Así que mi res/valores/style.xml se parece a esto:

<resources> 

    <style name="Theme" parent="android:Theme" /> 

    <style name="Theme.Transparent"> 
     <item name="android:windowBackground">@drawable/transparent_background</item> 
    </style> 

    <drawable name="transparent_background">#00000000</drawable> 

</resources> 

La actividad fragmento:

<activity android:name=".CameraPreview" 
     android:label="Camera" 
     android:screenOrientation="landscape" 
     android:theme="@android:style/Theme.NoTitleBar.Fullscreen"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

    <activity android:name=".Controlls" 
       android:label="Controlls" 
       android:screenOrientation="portrait" 
       android:theme="@android:style/Theme.Translucent"> 
    </activity> 

Cuando inicio esta actividad de mi actividad de las raíces, el diseño se ve arrastrado correctamente , pero el fondo se mantiene negro. Intenté usar @android:style/Theme.Translucent en su lugar, pero este tema hereda la orientación de la actividad de llamada (paisaje) y eso no es lo que quiero.

Editar:

La aplicación que mantiene la previa de la cámara se ajusta a la vista horizontal, ya que no muestra la vista previa correctamente en orientación vertical. (Ver old google bug report)

Lo que quería hacer era poner una actividad independiente para la interfaz de interacción del usuario frente al soporte de la superficie de la cámara (esta actividad debería configurarse como 'retrato', o mejor aún 'sensor')

Respuesta

2

Pruebe el @android:style/Theme.Translucent incorporado en lugar del personalizado, según this blog post. No he intentado hacerlo yo mismo, así que no sé si la técnica escrita sobre ella funciona o no.

+0

@android: Estilo/Theme.Translucent es transparente, pero corrige la vista de la orientación de la actividad subyacente (mi vista previa de cámara con vista horizontal). Esta vista debe ser retrato. –

+0

Eso no tiene nada que ver con su fondo. Si no desea que su actividad cambie de orientación, eso se maneja de otras maneras, como 'android: screenOrientation =" portrait "' en su manifiesto. – CommonsWare

+0

Lo siento, no lo mencioné, pero eso es exactamente lo que hice. (Editaré la publicación con mi manifiesto). Gracias por tus consejos hasta ahora. –

1

Me enteré de que faltaba otro elemento secundario importante para la descripción del estilo anterior, <item name="android:windowIsTranslucent">true</item>.

Problema:

Ese elemento hijo también hace que la sincronización de la orientación de la actividad con el llamando a uno. (el mismo efecto que @android:style/Theme.Translucent)

1

Me encontré con el mismo problema que usted describe (con respecto al fondo translúcido y la orientación de la pantalla), pero al final me reconcilié con el hecho de que así es como funciona. De hecho, tiene sentido que funcione de esta manera. No puedo pensar en ningún sistema basado en pantalla que permita mezclar vistas de retrato y paisaje, entonces, ¿por qué debería Android?

Supongo que la regla general es que todas las actividades visibles deben tener la misma orientación, independientemente de los atributos en el archivo de manifiesto. Si todos están configurados en "sensor", todos cambiarán, si uno se fija en vertical u horizontal, entonces los demás deben seguir (y quien lo configure último "gana").

supongo que esto era tan evidente para los desarrolladores que no se les ocurre que documentan :)

0

Retire y todo su hecho

@Override 
public void onAttachedToWindow() {} 
+4

por favor explique su código con más detalle. –