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.

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!

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.

  • Cómo administrar el diseño de preferencias personalizadas
  • Cómo configurar los parámetros de un botón mediante programación
  • ThumbOffset no funciona
  • Android ImageView escala tipo centerCrop
  • Android Gridview - Linear layout_height que se ignora
  • Autocompletetextview como una pista
  • Com.android.layoutlib.bridge.MockView no se puede convertir en android.view.ViewGroup
  • Llamadas de bloqueo de Android Canvas IllegalArgumentException
  • ImageView en ListView que amplía el ancho máximo
  • View.setPadding acepta sólo en px, ¿hay de todos modos setPadding en dp?
  • ScrollView desplazamientos automáticos para seleccionar TextView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.