Cómo desplazar la actividad en Android
Aquí hay tres tareas principales:
Calcular el tamaño de la Actividad existente y determinar su nueva posición de coordenadas;
Hacer la Actividad transparente para que pueda ser visto Fondo;
Elimine el fondo para que el usuario ya no pueda interactuar con él.
Calcular el tamaño de la ventana
Como se mencionó anteriormente, necesitamos basar el proyecto en una aplicación móvil existente (usando la biblioteca ActionBarSherlock), que hemos incluido como código fuente externo. Las bibliotecas están integradas en el proyecto.
Si está familiarizado con el código fuente de ABS o comprende la arquitectura local de ActionBar, encontrará que: si cambia el tamaño de la Actividad, cuando llame al método setContentView, la funcionalidad no será implementado: el tamaño y la posición de ActionBar Nada cambiará. Lo que hay que hacer es operar en un nivel superior cuando el sistema dibuja la ActionBar, es decir, la ABS o ActionBar local, que aún no tiene ningún dato de ventana, para que podamos ajustarla según sea necesario.
La forma más obvia es cambiar el tamaño de la ventana, por lo que aquí necesitas el siguiente código:
Después de ejecutar el código, puedes ver que el tamaño de la ventana ha aumentado. cambiado según los valores de mActivityWindowWidth y mActivityWindowHeight.
La verificación is_tablet solo es válida para tabletas, y el identificador mOpenAsSmallWindow indica si se debe hacer la ventana en pantalla completa o presentarla como una ventana nueva.
Si ocurre un error durante la ejecución, el registro de errores es: ActionBarView solo se puede usar con android:layout_width="match_parent" (o fill_parent). Entonces no te preocupes, tenemos el código fuente de ABS, puedes modificar el código fuente directamente.
Abra el archivo ActionBarView y comente la excepción lanzada en el método onMeasure, esto resolverá el problema. Android utiliza un mecanismo de control de permisos bastante específico, por lo que no podemos profundizar mucho en eso, tal vez incluso podamos contar aproximadamente los elementos del menú, etc., pero hay muchas cosas que no podemos controlar.
Nota: Este método no se ha probado en ActionBar nativo ya que solo se ha probado en la versión de Android del autor. Para deshabilitar ActionBar, necesita encontrar la clase ActionBarSherlock y comentar las siguientes líneas de código:
1
// registrarImplementation( ActionBarSherlockNative.class);
El código debería ejecutarse normalmente y podrá ver la Actividad con un fondo opaco.
Agregar transparencia
Después de darte cuenta de que el tamaño y las dimensiones de tu actividad han cambiado, es hora de hacerla transparente. Puedes agregar este atributo en el tema Actividad de esta tableta:
1
Este valor de propiedad hace que el fondo de la Actividad sea transparente.
Se ve bien y básicamente se logra el efecto.
También hay un pequeño problema: la prueba anterior se realizó en Nexus7 android4.3 y la aplicación se realizó en la versión android4.2 de Nexus7, por lo que no se puede mostrar la Actividad.
Después de mucha depuración e inspección de registros, descubrimos que nuestra Actividad (llamémosla MainActivity) no fue destruida (no se llamó al método onDestroy), por lo que el sistema Android la ignoró y no la dibujó. ¿Por qué? Porque Android 4.4 KitKat añade un nuevo algoritmo de optimización. Debido a este algoritmo de optimización, Android ve la Actividad en modo de pantalla completa (independientemente de los cambios de WindowManager) y dibuja MainActivity, pero el contenido encima se ignora, por lo que no vemos nada mostrado.
Investigamos esto y descubrimos que los cuadros de diálogo y otros widgets que no se muestran en modo de pantalla completa se dibujan bien, por lo que debemos agregar las siguientes líneas al tema:
1
2
3
4
Esto resuelve el problema. Con todo, hemos implementado una Actividad transparente al pasar el mouse.