Reemplazar el diseño en el cambio de orientación
Mi aplicación tiene una vista web y algunos botones dentro de un LinerLayout.
El problema es que quiero que los botones estén en la parte inferior en modo vertical y en la izquierda en modo horizontal mientras la vista web mantiene su estado.
- Posicionamiento de MediaController: vincular a VideoView
- Cómo cambiar el color del hipervínculo en android
- Spinner se mueve hacia abajo en el diseño después de seleccionar un elemento
- Soporte para Android Barra de herramientas que no muestra la costumbre dibujable correctamente
- Cómo obtener el ancho y la altura de la pantalla
Dos diseños diferentes no funcionan ya que obligan a recrear la actividad que actualiza la vista web. Por ahora uso android: configChanges = "orientación" en la etiqueta de la actividad para webview no obtener actualizado en el cambio de orientación.
¿Hay de todos modos para reemplazar el diseño de los botones en el cambio de modo de pantalla?
modo retrato
Modo paisaje
- Alinear la línea de base con un TextView que se envuelve dentro de un TextInputLayout
- desea deshabilitar el botón de radio que aparece en el hilandero después de la selección
- Biblioteca de diseño de Android 25.1.0 TextInputLayout La sugerencia no se muestra correctamente en comparación con 24.2.1
- No se agrega el archivo de diseño xml de Android a R.java
- Cambiar el color del texto
- Ver entre los elementos del menú en la barra de herramientas
- RelativeLayout y el porcentaje de altura. No se puede usar layout_below y layout_weight
- Adición de una barra de acción a Theme.Black.NoTitleBar Android
He probado fragmentos, pero el tratamiento de fragmento hace las cosas mucho más complejas y el fragmento en sí necesita el ahorro y la restauración que puede no funcionar en una webview que tiene estado javascript, Así que busqué más y encontrar un buen artículo en algún lugar y con algunas modificaciones vine a Una solución que sugiero:
Primero, agrega android:configChanges="orientation|screenSize|keyboard|keyboardHidden"
para que la aplicación maneje los cambios de configuración en lugar de android.
Haga dos diseños diferentes para el paisaje y el retrato. En ambos diseños en lugar de webview, coloque un FrameLayout que actúa como marcador de posición para la vista web.
Defina el método initUI como este y poner todo lo relacionado con la inicialización de la interfaz de usuario en este método:
public void initui() { setContentView(R.layout.main); if (wv == null) wv = new WebView(this); ((LinearLayout)findViewById(R.id.webviewPlace)).addView(wv); findViewById(R.id.home).setOnClickListener(this); }
Si la vista web no existe aún, se creará y después de setContentView(R.layout.main)
se añadirá a la presentación. Cualquier otra personalización de la interfaz de usuario que necesites llegó después de esto.
Y en onConfigurationChanged
:
@Override public void onConfigurationChanged(Configuration newConfig) { ((LinearLayout)findViewById(R.id.webviewPlace)).removeAllViews(); super.onConfigurationChanged(newConfig); initUI(); }
En onConfigChange
la vista web se quita del marcador de posición antiguo y se initui
para volver a agregarla al nuevo diseño.
En oncreate()
llamar a initui()
para que el ui se inicialice por primera vez.
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initUI() }
Ojalá fuera útil para alguien.
Poner eso en la layout-land
para las disposiciones que usted desea como paisaje.
La idea es que no debería usar configChange="orientation"
porque tiene sus desventajas. Puedes encontrar un post detallado aquí . Debe manejar manualmente su estado si desea cambiar su diseño. Por supuesto que puede programmaiclly hacer esto, pero si desea utilizar xml para hacer esto. Usted puede mantener webView con fragmentos.
Si está utilizando android:configChanges="orientation|screenSize"
En manifiesto, ignora el XML en " layout-land ". Si crea un XML diferente para el paisaje, no utilice la android:configChanges="orientation|screenSize"
para esa actividad en el manifiesto.
Haga que su vista sea un diseño relativo. Cuando los cambios de orientación sólo ajustar los parámetros de diseño para cada vista en código. Haga que sus botones estén contenidos en un diseño lineal
Como en..
Retrato
LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); lp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); buttonLinearLayout.setOrientation(LinearLayout.HORIZONTAL); buttonLinearLayout.setLayoutParams(lp); LayoutParams webParams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); lp.addRule(RelativeLayout.ABOVE, R.id.buttons); webView.setLayoutParams(webParams);
Paisaje
LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT); lp.addRule(RelativeLayout.ALIGN_PARENT_LEFT); buttonLinearLayout.setOrientation(LinearLayout.VERTICAL); buttonLinearLayout.setLayoutParams(lp); LayoutParams webParams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); lp.addRule(RelativeLayout.TO_RIGHT_OF, R.id.buttons); webView.setLayoutParams(webParams);
Asegúrese de que los LayoutParams que está utilizando son Parámetros RelativeLayout (siempre use Layoutparams del padre de la vista)
Intente utilizar este código:
@Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); setContentView(R.layout.activity_splash); }
Puede añadir una carpeta de valores- (configuración que usted requiere – por ejemplo, tierra, retrato) bajo recursos y mencionar el diseño que necesita para esta configuración. Es tan simple como eso.
Por favor, compruebe el siguiente enlace para obtener más información: http://developer.android.com/training/multiscreen/screensizes.html#TaskUseAliasFilters
- No se puede crear Dir de archivos externos en Android. WRITE_EXTERNAL_STORAGE está presente
- Biblioteca PDF para renderizar los archivos PDF en Android