java - studio - Android onConfigurationChanged no se llama
on save instance state android (8)
Agregue esto a su manifiesto para cada actividad.
android:configChanges="keyboardHidden|orientation|screenSize"
A continuación, anule onConfigurationChanged
en su actividad como tal
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
Tengo problemas para decirle a Android que no llame a onCreate()
cuando cambie la orientación. He agregado android:configChanges="orientation"
a mi manifiesto pero aún cuando se llama a la orientación onCreate()
. Aquí está mi código.
AndroidManifest.xml
<activity android:name="SearchMenuActivity" android:theme="@android:style/Theme.NoTitleBar" android:configChanges="orientation"></activity>
SearchMenuActivity.java
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Set the current layout to the search_menu
setContentView(R.layout.search_menu_activity);
Log.d(TAG, "onCreate() Called");
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
//don''t reload the current page when the orientation is changed
Log.d(TAG, "onConfigurationChanged() Called");
super.onConfigurationChanged(newConfig);
}
Y mi salida de LogCat
06-23 12:33:20.327: DEBUG/APP(2905): onCreate() Called
//Orientation Changes
06-23 12:33:23.842: DEBUG/APP(2905): onCreate() Called
¿Alguien sabe lo que estoy haciendo mal? Gracias.
Debe cambiar la entrada configChanges en AndroidManifest.xml para:
android:configChanges="keyboardHidden|orientation"
De lo contrario, deslizar el teclado no se activa en el cambio de configuración () aunque la orientación cambie. Acabo de probar esto en mi HTC Desire Z.
Este fue mi gremlin para el ~ mismo problema:
Precaución: a partir de Android 3.2 (nivel de API 13), el "tamaño de pantalla" también cambia cuando el dispositivo cambia entre la orientación vertical y horizontal. Por lo tanto, si desea evitar que se reinicie el tiempo de ejecución debido al cambio de orientación cuando se desarrolla para API nivel 13 o superior (según lo declarado por los atributos minSdkVersion y targetSdkVersion), debe incluir el valor "screenSize" además del valor de "orientación". Es decir, debe descartar android: configChanges = "orientation | screenSize". Sin embargo, si su aplicación se dirige al nivel API 12 o inferior, su actividad siempre maneja esta configuración por sí misma (este cambio de configuración no reinicia su actividad, incluso cuando se ejecuta en un dispositivo con Android 3.2 o superior).
(De http://developer.android.com/guide/topics/resources/runtime-changes.html )
TL; DR: agregue "| screenSize" a android: configChanges = "orientation" para API 14+
Intenta usar este ...
android:configChanges="orientation|keyboardHidden|screenSize"
Manifiesto:
<activity
android:name=".MainActivity"
android:configChanges="orientation|keyboardHidden|screenSize">
</activity>
Actividad y Fragmento:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
Log.d(TAG, "onConfigurationChanged " +
(newConfig.orientation
== Configuration.ORIENTATION_LANDSCAPE
? "landscape" : "portrait"));
}
Salida:
10-29 21:53:26.951 D/FragmentOne: onConfigurationChanged landscape 10-29 21:53:26.951 D/MainActivity:onConfigurationChanged landscape
No estaba activando en mi Fragment
(los Fragments
no están registrados en AndroidManifest.xml
), así que tuve que moverlo a la Activity
administra mi Fragment
, en mi caso, TabsPagerActivity
.
Pocas cosas pueden ser verificadas:
En mi caso, estaba rastreando el cambio de idioma del dispositivo usando onConfigurationChanged.
Pocas cosas necesitan saber sobreConfigurationChanged hay alguna diferencia en el comportamiento entre onConfigurationChanged de Activity y Application.
Cuando cambie la configuración del dispositivo, se llamará de forma automática e inmediata al nivel de la aplicación en Cambio de configuración, pero en la actividad de cambio de configuración se ejecutará cuando navegue a esa actividad.
y otra cosa es que solo la configuración regional en el manifiesto no funcionará en algún momento. Así que has declarado otro evento de cambio de configuración junto con la configuración regional (en mi caso) que debería ser como android: configChanges = "layoutDirection | locale"
Un par de cosas para probar:
android:configChanges="orientation|keyboardHidden|screenSize"
lugar de android:configChanges="orientation"
Asegúrese de no estar llamando a setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
en cualquier sitio. Esto causará que el Cambio de configuración () no se active.
Comprueba que no estés usando android:screenOrientation
en tu manifiesto.
Si nada de eso funciona, lee el documento de Android sobre cómo manejar los cambios de tiempo de ejecución y asegúrate de estar haciendo todo correctamente. Puede haber algo más en su código que esté causando el problema. http://developer.android.com/guide/topics/resources/runtime-changes.html
EDITAR: Como señaló Derrick, asumí que estabas cambiando la configuración con el acelerómetro detectando qué camino enfrentaba el dispositivo. Si desea que la configuración cambie a medida que se muestra / oculta el teclado, configChanges en el manifiesto también debe incluir keyboardHidden
.