Disposición de Android: expandir ImageView para rellenar el ancho, pero no mayor?
Hola, los miembros de stackoverflow útiles,
Estoy tratando de lograr lo que parece ser un diseño simple en una actividad de Android, pero no puedo conseguirlo usando wrap_content y fill_parent / match_parent.
- AutoCompleteTextView - cómo deshabilitar desplegable cuando tenemos una coincidencia exacta después de filtrar?
- Alinear el borde izquierdo con el centro - RelativeLayout
- Cómo cambiar ¿Cambiar texto a lado derecho en android?
- Vista de Android comparando dos vistas de igualdad
- Elemento de menú de la barra de herramientas
Imagen para dar una idea básica del problema: http://i89.photobucket.com/albums/k207/cephron/Layout_quandary.png
En un LinearLayout vertical, tengo un ImageView de la parte superior de un diseño infantil que contiene botones y cosas. Me gustaría que el ImageView se amplíe para hacer que la imagen sea lo más grande posible (es decir, llenar el ancho de la pantalla) sin tomar más espacio vertical de lo necesario para lograr esto (es decir, quiero que el ImageView para tocar la parte superior De la pantalla, con los botones y cosas tocando la parte inferior de la imagen). No puedo lograr que esto suceda usando wrap_content y fill_parent, y todos mis problemas con la gravedad no parecen cambiar nada. Tuve que incluir pesas sólo para asegurar que la imagen no multitud todo lo demás totalmente fuera de la pantalla.
Me encantaría publicar el código correcto, pero – noob que soy – he perdido alrededor de 20 minutos tratando de hacerlo funcionar con el formateador de código de Stackoverflow, y partes de él no aparecerían.
Por lo tanto, aquí está mi código, lo suficientemente mutilado que no se reconoce por lo que fue selectivamente la eliminación de partes de la misma:
[LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center_horizontal"] [ImageView android:id="@+id/door_detail_video_frame" android:src="@drawable/door_closed_256" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1"/] [LinearLayout android:id="@+id/door_detail_control_area" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="0"] [ImageView android:id="@+id/door_detail_status_frame" android:src="@drawable/door_closed_locked_67" android:layout_width="wrap_content" android:layout_height="fill_parent"/] [LinearLayout android:layout_height="wrap_content" android:orientation="vertical" android:layout_width="fill_parent"] [Button android:id="@+id/door_detail_override_button" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/door_detail_override_button_text"/] [Button android:id="@+id/door_detail_camera_button" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/door_detail_camera_button_text"/] [/LinearLayout] [/LinearLayout] [/LinearLayout]
Creo que las únicas partes relevantes son el primer LinearLayout y ImageView, pero las cosas en los diseños anidados (que corresponden a los "botones y cosas") se incluyen para completar.
¿Hay una manera de lograr el formato de diseño deseado?
¡Gracias de antemano por cualquier ayuda!
- Cómo desactivar los eventos táctiles en SwipeRefreshLayout?
- ¿Cómo especifico el ancho y la altura de las celdas de Android GridLayout en medidas relativas?
- LinearLayout no llena tablerow incluso la anchura fill_parent se llama
- Cómo agregar tabhost en fragmentos
- ¿Cómo puedo añadir una nueva biblioteca a las dependencias de Android usando eclipse adt?
- Google Maps Android API V2 ennegrece parte del diseño
- Coloque 2 botones de radio uno al lado del otro (en una "línea") en una disposición vertical
- Cargar la barra de progreso en android?
No probado, esto podría ayudar. He intentado este tipo de cosas antes, parece más difícil de lo que debería ser:
ImageView iv = (ImageView)findViewById(R.id.door_detail_video_frame); ViewTreeObserver vto = iv.getViewTreeObserver(); //gets screen dimensions DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); //this happens before the layout is visible vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { int newWidth, newHeight, oldHeight, oldWidth; //the new width will fit the screen newWidth = metrics.widthPixels; //so we can scale proportionally oldHeight = iv.getDrawable().getIntrinsicHeight(); oldWidth = iv.getDrawable().getIntrinsicWidth(); newHeight = Math.floor((oldHeight * newWidth) / oldWidth); iv.setLayoutParams(new LinearLayout.LayoutParams(newWidth, newHeight)); iv.setScaleType(ImageView.ScaleType.CENTER_CROP); //so this only happens once iv.getViewTreeObserver().removeGlobalOnLayoutListener(this); } });
Sugerencia sobre el formador de código SO: Simplemente copie y pegue el código en la ventana, selecciónelo todo y pulse Ctrl + K.