¿Cómo evitar que el diseño se restablezca cuando cambia la orientación de la pantalla?

Mi ejemplo está adaptado de una de las aplicaciones de ejemplo que vienen con una de las bibliotecas de compatibilidad. Ese es el archivo de diseño:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/layout" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content" android:padding="8dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:textAppearance="?android:attr/textAppearanceMedium" android:text="@string/fragment_menu_msg" /> <CheckBox android:id="@+id/menu1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:checked="true" android:text="@string/fragment1menu"> </CheckBox> <CheckBox android:id="@+id/menu2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:checked="true" android:text="@string/fragment2menu"> </CheckBox> </LinearLayout> 

Y aquí hay código Java:

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.fragment_menu); ViewGroup layout = (ViewGroup) findViewById(R.id.layout); Button btn = new Button(getApplication()); btn.setId(1); btn.setText("Button 1"); layout.addView(btn); mCheckBox1 = (CheckBox) findViewById(R.id.menu1); mCheckBox1.setOnClickListener(mClickListener); } final OnClickListener mClickListener = new OnClickListener() { public void onClick(View v) { ViewGroup layout = (ViewGroup) findViewById(R.id.layout); Button btn = new Button(v.getContext()); btn.setId(2); btn.setText("Button 2"); layout.addView(btn); } }; 

La actividad se inicia, se desactiva la primera casilla de verificación, se añade un botón (botón 2) al diseño, se cambia la orientación de la pantalla y el botón 2 (añadido en el método onClickListener) desaparece.

Imágenes en Directupload.net

He leído un montón de cosas acerca de cómo manejar los cambios en tiempo de ejecución, pero todavía no tengo una imagen clara de cómo evitar que el botón 2 desaparezca en el ejemplo de avobe. Cualquier ayuda es muy apreciada.

4 Solutions collect form web for “¿Cómo evitar que el diseño se restablezca cuando cambia la orientación de la pantalla?”

Si desea configurar la pantalla en modo vertical y desea detener la actividad de recreación mientras se cambia la orientación, colóquela como si fuera un código inferior a su actividad.

Código:

 <activity android:name=".YourActivityName" android:windowSoftInputMode="adjustPan" android:screenOrientation="portrait" android:configChanges="keyboard|keyboardHidden|orientation"></activity> 

Este código me ayuda y también funciona para usted.

Disfrutar.

🙂

Codificación feliz

La actividad se reinicia cuando cambia de orientación y se pierde todo su estado (en su caso se agrega dinámicamente el botón). Usted debe estar preparado para manejar esto como hay otras situaciones donde esto podría suceder. Por ejemplo, su aplicación puede ser eliminada si está en segundo plano y un dispositivo necesita liberar memoria.

La solución correcta es guardar el estado de la actividad antes de que se destruya y luego restaurarla una vez que se recrea. Algo como esto:

 @Override protected void onSaveInstanceState(Bundle outState) { // save state of your activity to outState } @Override public void onCreate(Bundle savedInstanceState) { if (savedInstanceState != null) { // restore state of your activity from savedInstanceState } } 

Consulte el tema del estado de la actividad de ahorro en la documentación oficial para obtener más detalles.

poner esta entrada en manifiesto con la actividad y la función Override onConfigurationChanged

 android:configChanges="orientation|keyboardHidden|screenSize" @Override public void onConfigurationChanged(Configuration newConfig) { // super.onConfigurationChanged(newConfig); } 

esto detendrá la recreación de la actividad en el cambio de orientación ……

Haga que su actividad se parezca a esto en manifiesto

  <activity android:name=".Hello" android:label="@string/app_name" android:screenOrientation="portrait" <-- Screen will be forced to have portrait android:configChanges="orientation|keyboardHidden|screensize" > <-- No Restart in these cases 

ScreenSize atributo parece ser añadido en 4,0 por lo que no lo mencionó si está ruuning por debajo de 4,0.

  • La longitud del archivo es 0 al recrear el archivo desde URI, o filepath original
  • Obtener la altura de STATUS BAR
  • Diferencia entre setBackgroundDrawable () y setBackground ()
  • Intentando crear una solicitud SOAP correcta
  • Terminar una actividad de otra clase
  • Rehacer la solicitud anterior cuando el primero falla con 401 No autorizado
  • Android Java: Desactivar la pantalla
  • ¿Cómo obtengo el nombre del método dentro de ese método?
  • El parámetro de declaración de una función como final: ¿por qué y cuándo es necesario?
  • ¿Por qué DrawerLayout a veces falla al abrirse?
  • Libstreaming: utilice VLC como cliente RTSP
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.