android - rotate - lock screen orientation html5
Forzar el modo de orientaciĆ³n "retrato" (10)
Algo para complementar: he actualizado una aplicación recientemente, la anterior funcionaba tanto en modo horizontal como en modo vertical, y quiero que la versión actualizada funcione en modo vertical, así que agregué
android:screenOrientation="portrait"
a la actividad correspondiente, y simplemente se bloqueó cuando probé la actualización. Entonces agregué
android:configChanges="orientation|keyboardHidden"
también, y funciona.
Estoy tratando de forzar el modo "retrato" para mi aplicación porque mi aplicación no está diseñada para el modo "paisaje".
Después de leer algunos foros, agregué estas líneas en mi archivo de manifiesto:
<application
android:debuggable="true"
android:icon="@drawable/icon"
android:label="@string/app_name"
android:screenOrientation="portrait">
Pero no funciona en mi dispositivo (HTC Desire). Cambia de "retrato" a "paisaje", ignorando las líneas del archivo de manifiesto.
Después de leer más foros, intenté agregar esto en mi archivo de manifiesto:
<application
android:debuggable="true"
android:icon="@drawable/icon"
android:label="@string/app_name"
android:configChanges="orientation"
android:screenOrientation="portrait">
y esta función en mi clase de actividad:
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
Pero de nuevo, no hay suerte.
Creo que android:screenOrientation="portrait"
puede usarse para actividades individuales. Así que usa ese atributo en la etiqueta <activity>
como:
<activity android:name=".<Activity Name>"
android:label="@string/app_name"
android:screenOrientation="portrait">
...
</activity>
Creo que quieres agregar android:configChanges="orientation|keyboardHidden"
a tu actividad? De lo contrario, la actividad se reinicia en la configuración de cambio. El onConfigurationChanged
no se llamaría entonces, solo el onCreate
De acuerdo con la documentación de Android, también debe incluir a menudo screenSize
como un posible cambio de configuración.
android:configChanges="orientation|screenSize"
Si su aplicación apunta al nivel de API 13 o superior (según lo declarado por los atributos minSdkVersion y targetSdkVersion), también debe declarar la configuración "screenSize", porque también cambia cuando un dispositivo cambia entre las orientaciones vertical y horizontal.
Además, si todos incluyen el valor keyboardHidden
en sus ejemplos, ¿no deberían considerar también locale
, mcc
, fontScale
, keyboard
y otros?
Establezca el modo vertical u horizontal , agregue líneas respectivamente.
Importar debajo de la línea:
import android.content.pm.ActivityInfo;
Agregue la línea Abajo justo arriba de setContentView(R.layout.activity_main);
Para el retrato :
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//Set Portrait
Para paisajismo :
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);//Set Landscape
Esto definitivamente funcionará.
No aplique la orientación al elemento de la aplicación , en su lugar, debe aplicar el atributo al elemento de actividad , y también debe configurar configChanges
como se indica a continuación.
Ejemplo:
<activity
android:screenOrientation="portrait"
android:configChanges="orientation|keyboardHidden">
</activity>
Esto se aplica en el archivo de manifiesto AndroidManifest.xml
.
Respuesta corta: No lo hagas.
Rediseñe su aplicación para que pueda ejecutarse tanto en modo vertical como horizontal. No existe una interfaz de usuario que no pueda diseñarse para funcionar tanto en vertical como en horizontal; Solo desarrolladores perezosos o poco imaginativos.
La razón por la que es bastante simple. Desea que su aplicación pueda ser utilizada por la mayor audiencia posible en tantos dispositivos diferentes como sea posible. Al forzar una orientación de pantalla en particular, evita que su aplicación se ejecute (de manera utilizable) en dispositivos que no la admiten y frustrará y alienará a los clientes potenciales que prefieren una orientación diferente.
Ejemplo: diseñas tu aplicación para forzar el modo retrato. Un cliente descarga la aplicación en un dispositivo 2-en-1 que utiliza principalmente en modo horizontal.
Consecuencia 1: su aplicación es inutilizable, o su cliente se ve obligado a desacoplar su dispositivo, rotarlo y usarlo en una orientación que no sea familiar o cómoda para ellos.
Consecuencia 2: el diseño no intuitivo de su aplicación frustra al cliente y encuentra una alternativa o abandona por completo la aplicación.
Estoy luchando con esto con una aplicación en este momento y como consumidor y desarrollador, lo odio. Tan útil como es la aplicación, tan fantástica como son las características que ofrece, odio la aplicación porque me obliga a usar una orientación que es contraria a cualquier otra forma en que uso mi dispositivo.
No quieres que tus clientes odien tu aplicación.
Sé que esto no responde directamente a la pregunta, así que quiero explicarlo con un poco más de detalle para aquellos que sienten curiosidad.
Hay una tendencia para que los desarrolladores sean realmente buenos en escribir código y realmente terribles en el diseño. Esta pregunta, aunque suena como una pregunta de código y el autor de la pregunta ciertamente siente que es una pregunta de código, es realmente una pregunta de diseño.
La pregunta realmente es "¿Debo bloquear la orientación de la pantalla en mi aplicación?" El autor de la pregunta eligió diseñar la interfaz de usuario para que funcione y se vea bien solo en modo retrato. Sospecho que fue para ahorrar tiempo de desarrollo o porque el flujo de trabajo de la aplicación es particularmente propicio para un diseño vertical (común para los juegos móviles). Pero esas razones descuidan todos los factores importantes reales que motivan un diseño adecuado.
Compromiso con el cliente: desea que sus clientes se sientan atrapados en su aplicación, no eliminados de ella. La aplicación debería pasar sin problemas desde lo que fuera que estuviera haciendo su cliente antes de abrirla. (Esta es la razón por la que la mayoría de las plataformas tienen principios de diseño coherentes, por lo que la mayoría de las aplicaciones parecen más o menos parecidas, aunque no tienen por qué hacerlo).
Respuesta del cliente: desea que sus clientes reaccionen positivamente a su aplicación. Deberían disfrutar usándolo. Incluso si se trata de una aplicación de nómina para el trabajo, debería ser un placer para ellos abrirla y registrarse. La aplicación debería ahorrarle tiempo a sus clientes y reducir la frustración sobre otras alternativas. (Las aplicaciones que molestan a los usuarios generan resentimiento contra tu aplicación, que se convierte en resentimiento contra tu marca).
Conversión de clientes: desea que sus clientes puedan moverse rápida y fácilmente de la navegación a la interacción. Este es el objetivo final de cualquier aplicación, convertir las impresiones en ingresos. (Las aplicaciones que no generan ingresos son una pérdida de tiempo para construir, desde una perspectiva empresarial).
Una IU mal diseñada reduce el compromiso y la respuesta de los clientes, lo que en última instancia resulta en menores ingresos. En un mundo centrado en el móvil (y particularmente en el tema de los modos de visualización vertical / horizontal), esto explica por qué el diseño web sensible es tan importante. Walmart Canadá introdujo el diseño responsivo en su sitio web en noviembre de 2013 y experimentó un aumento del 20% en la conversión de clientes. O''Neill Clothing implementó un diseño web responsivo y los ingresos de los clientes que usaban dispositivos iOS aumentaron 101.25% , y el 591.42% de los clientes que usaban dispositivos Android .
También hay una tendencia a que los desarrolladores se centren intensamente en implementar una solución particular (como bloquear la orientación de la pantalla), y la mayoría de los desarrolladores en este sitio estarán encantados de ayudar a implementar esa solución, sin cuestionar si es lo mejor solución al problema.
Bloquear la orientación de la pantalla es el diseño de la interfaz de usuario equivalente a implementar un bucle do-while. ¿Está realmente seguro de querer hacerlo de esa manera, o hay una alternativa mejor?
No fuerce su aplicación en un solo modo de visualización. Invertir el tiempo y el esfuerzo extra para que sea sensible.
Si tiene mucha actividad como la mía, en su aplicación O si no desea ingresar el código para cada etiqueta de actividad en el manifiesto, puede hacer esto.
en su clase de Base de Aplicación obtendrá una devolución de llamada del ciclo de vida
así que, básicamente, lo que sucede en cada actividad al crear el on create en Application Class se activa aquí es el código ...
public class MyApplication extends Application{
@Override
public void onCreate() {
super.onCreate();
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle bundle) {
activity.setRequestedOrientation(
ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
// for each activity this function is called and so it is set to portrait mode
}
@Override
public void onActivityStarted(Activity activity) {
}
@Override
public void onActivityResumed(Activity activity) {
}
@Override
public void onActivityPaused(Activity activity) {
}
@Override
public void onActivityStopped(Activity activity) {
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {
}
@Override
public void onActivityDestroyed(Activity activity) {
}
});
}
espero que esto ayude.
Tenía esta línea en mi AndroidManifest.xml
<activity
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale"
android:label="@string/app_name" android:name="Project Name"
android:theme="@android:style/Theme.Black.NoTitleBar">
Que cambié a (acaba de agregar android:screenOrientation="portrait"
)
<activity
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale"
android:label="@string/app_name" android:name="Project Name"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Black.NoTitleBar">
Esto arregló las cosas para mí.
Tenga en cuenta que
android:screenOrientation="portrait"
android:configChanges="orientation|keyboardHidden"
se agrega en el archivo de manifiesto, donde se define la actividad.