Hacer que el Botón de la Imagen Tamaño de una plaza de siempre. Android

Tengo un Botón de la Imagen. Me la puede reemplazar con una vista personalizada si es necesario. Debo especificar la altura de la Imagen con el Botón Fill_parent. De modo que la imagen se extiende hasta la altura disponible en la pantalla. Al hacer esto no quiero perder el ancho. Quiero que sea un mínimo, ya que la altura y si es mayor que la altura, entonces no es un problema. No quiero que esto y por mucho tiempo.
Mientras hago esto, yo también quiero mantener la relación de aspecto. Por favor, hágamelo saber los parámetros que necesite ajustar para obtener este tipo de vista. Cualquier tipo de ayuda en este respecto es de agradecer. Gracias por su ayuda y tiempo.

Edición: a Continuación es el xml completo en el que estoy tratando de tener un desplazamiento horizontal de la vista con la altura como fill_parent y estoy tratando de llenar con imágenes que se ajusta a su altura y se expande o contrae la anchura como por la relación de aspecto. Incluso si la imagen es pequeña, quiero escala, de manera que la altura siempre ocupa el desplazamiento Horizontal de la vista.

<LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" android:layout_height="fill_parent"
    android:orientation="vertical">

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent" android:layout_height="fill_parent"
        android:orientation="vertical" android:layout_weight="3"
        android:background="#666666">
    </LinearLayout>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent" android:layout_height="fill_parent"
        android:orientation="vertical" android:layout_weight="7"
        android:background="#888888">
        <HorizontalScrollView android:id="@+id/horizontalScrollView1"
            android:layout_width="fill_parent" android:layout_height="fill_parent">
            <LinearLayout android:id="@+id/linearLayout1"
                android:layout_width="fill_parent" android:layout_height="fill_parent"
                android:orientation="horizontal">

                <ImageView android:src="@drawable/image1"
                    android:layout_weight="1" android:layout_width="wrap_content"
                    android:layout_height="fill_parent" android:adjustViewBounds="true"
                    android:id="@+id/attachimagebutton_2" />

                <ImageView android:src="@drawable/image2"
                    android:layout_weight="1" android:layout_width="wrap_content"
                    android:layout_height="fill_parent" android:adjustViewBounds="true"
                    android:id="@+id/attachimagebutton_2" />

            </LinearLayout>
        </HorizontalScrollView>
    </LinearLayout>
</LinearLayout>
InformationsquelleAutor Vinod | 2011-06-21

3 Kommentare

  1. 2

    Bueno, no hay ninguna necesidad de que sea un ImageButton ya que se puede hacer cualquier cosa en android un botón…

    Puede agregar un ImageView en el XML, darle un id, el origen de la imagen, la altura de fill_parent, el ancho como wrap_content y de fijar la relación de aspecto con android:adjustViewBounds="true". Entonces usted puede también agregar android:clickable="true" y la encontramos en el código de su id. A continuación, puede añadir el onClickListener.

    Espero que funcione

    • ¿has probado lo que me escribió? Si entiendo lo que usted está diciendo, que el código que se debe hacer… quiero decir, el adjustViewBounds junto con el wrap_content en el layout_width propert va a fijar la anchura en una escala de manera
    • Pero ¿cómo se puede estirar su imagen de 300×300 si el contenedor es 300×72… En ese caso será siempre 72×72 ya que se llena la menor longitud de la primera…. ¿Por qué es tan 300×72? Puedes hacerlo más grande? No puede tener diferentes alturas y anchuras ya que usted tiene un cuadrado y youre mantener la relación de aspecto, pensar de nuevo lo que el punto de
    • Quiero decir, como el resultado de la vi con la configuración anterior fue 300×72. Este no es el resultado deseado. El resultado deseado es de 300×300. Tengo la altura del conjunto a «fill_parent». Este es de alrededor de 300. y el ancho es wrap_content. Me gustaría que la imagen se amplía a 300×300 de 72×72. Si la imagen es de 600 x 800 quiero que se establece en 300×400 como la altura máxima es de 300. Pero no hay ninguna ancho máximo en mi requisito. Se puede hacer esto? También quiero mencionar que la altura es de aproximadamente 300. Se ha establecido para fill_parent y no específicas de dp como tengo que configurar para todo tipo de tamaños de pantalla.
    • Podrías editar tu post y me muestran todo su XML? Sus parece que están haciendo algo mal, como debería funcionar…
    • Lo he editado con todo el xml que estoy utilizando. Por favor, hágamelo saber si algo está mal. Gracias.
    • Bien, es todo un lío, pero de todos modos podría ser el de los pesos que se asignan a la imageviews… sacarlos de su código y a ver qué pasa… Si te da resultados inesperados, el uso de pesas de 50 en ambas imágenes… y Si aún así no funciona… el Uso de un pariente diseño en lugar de su padre esquema lineal y alinee la segunda imagen a la izquierda de la primera, y dice lo que pasa… espero que funcione…

  2. 1

    Yo recomiendo tomar un enfoque diferente, el padre o la madre de diseño de aplicar gravity="center_horizontal" y el siguiente paso es tener una vista personalizada de ampliar el ImageButton clase para establecer su tamaño como el cuadrado, es realmente simple.

    Para crear la nueva clase, vamos a nombre SquareImageButton, y extender ImageButton. agregar el constructor por defecto con el contexto y los atributos y deje que se llame a la función super, no es necesario agregar nada más.

    Ahora reemplazan la onMeasure() método (que da la medida del ancho y la altura en los valores int), se toma el valor mínimo, y (como el método requiere) llamada setMeasuredDimension(w, h) con el nuevo valor mínimo por lo que será la plaza. Funcionó para mí, y aquí está el código si estás un poco perdido:

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int minDimension = Math.min(widthMeasureSpec, heightMeasureSpec);
        setMeasuredDimension(minDimension, minDimension);
    }
    • Exactamente, si se toma el máximo de uno, entonces usted puede crear un botón con, digamos, de mayor altura que la permitida área de dibujo. EDIT: me pongo lo que ha dicho, pero se ha trabajado para mí en diferentes presentaciones, no debería volver a la pantalla tamao pero el área asignada a la Vista
  3. 0

    Prueba este código, es el trabajo para mí .

    public class ButtonSquare extends Button {
    public ButtonSquare(Context context) {
        super(context);
    }
    
    public ButtonSquare(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    
    public ButtonSquare(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }
    
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        int height = MeasureSpec.getSize(heightMeasureSpec);
        super.onMeasure(
                MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY),
                MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY));
    }

    }

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea